版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/android_I_t/article/details/51314750
以下方法主要是通过接口回调来实现Activity 和 Fragment来实现通信的。
首先,acitvity需要与fragment关联,我是通过ViewPage进行关联的,代码如下:
<span style="font-size:24px;">@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvContent = (TextView) findViewById(R.id.tvContent) ;
btGet = (Button) findViewById(R.id.btn_getContent) ;
btGet.setOnClickListener(this);
vp = (ViewPager) findViewById(R.id.afViewPage);
vp.setAdapter(new InnerFragment(getSupportFragmentManager()));
}
private class InnerFragment extends FragmentPagerAdapter {
public InnerFragment(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null ;
switch (position) {
case 0:
fragment = new afFragment() ;
break;
case 1:
fragment = new faFragment();
break;
}
return fragment;
}
@Override
public int getCount() {
return 2;
}
}</span>
之后,要明白,事件的发起者就是需要定义接口的那个类;被调用的方法所在的类需要实现发起者的接口。下面介绍这两种方式:
1.Activity---->Fragment之间的传递,即:按钮在Acitivity界面中,你要点击按钮来调用Fragment中的方法或者是对象。
1.1发起者是Activity,所以在Activity建立一个接口,并且定义一个set方法,如下代码:
<span style="font-size:24px;"> /**
* 自己定义的接口
*/
public OnActionClick actionClick;
public interface OnActionClick {
void onActionClick();
}
public void setOnActionClick(OnActionClick actionClick){
this.actionClick = actionClick;
}</span>
1.2在被调用的fragment中实现这个接口并且实现那个set方法,需要承载这个Fragment对象的Activity的对象,来实现接口;在接口方法
onActionClick中调用Fragment中的方法或者对象。建立接口回调响应的前提是,在onAttach中进行接口关联。代码如下:
public class afFragment extends Fragment implements MainActivity.OnActionClick{
private MainActivity main ;
@Override
public void onAttach(Context context) {
super.onAttach(context);
main = (MainActivity) getActivity();
main.setOnActionClick(this);
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.af_fragment,null) ;
return view;
}
@Override
public void onActionClick() {
Toast.makeText(getActivity() , getString() , Toast.LENGTH_SHORT).show();
}
private String getString(){
return "this is afFragment`s content: AF";
}
扫描二维码关注公众号,回复:
3147701 查看本文章
2.1发起者是Fragment,所以在Fragment建立一个接口,并且定义一个set方法,如下代码:
public onFragmentAction fAction;
public interface onFragmentAction {
void setFragmentAction();
}
public void setOnFragmentAction(onFragmentAction fAction){
this.fAction = fAction;
}
2.2需要注意的是此时,需要在Fragment的生命周期 onAttach(Activity activity)中调用关联所建立的接口。
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
fAction = (onFragmentAction) activity;
}
2.3在Activity中实现Fragment中定义的接口,在接口方法中调用Activity的代码或者对象。
public class MainActivity extends FragmentActivity implements faFragment.onFragmentAction, View.OnClickListener {
/**
* faFragment 中的接口
*/
@Override
public void setFragmentAction() {
tvContent.setText("Acitvity中的方法结果---"+RandomNumber());
}
private int RandomNumber(){
return new Random().nextInt(5)+2;
}
}
以上就是本人通过接口回调来实现的Activity和Fragment之间的信息传递,当然也可以通过Handler进行,在这里就不进行细说了。
资源已经上传,请下载:
http://download.csdn.net/download/android_i_t/9510231