1.主Activity
fragmentList = new ArrayList<>();
fg_one = new OneFragment();
fg_two = new TwoFragment();
fg_three = new ThreeFragment();
fragmentList.add(fg_one);
fragmentList.add(fg_two);
fragmentList.add(fg_three);
fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(),fragmentList);
viewPager.setAdapter(fragmentAdapter);
viewPager.setCurrentItem(0);
viewPager.setOffscreenPageLimit(2);
方法1:
通过接口
首先创建接口,第一个为传递的数据,第二个为需要传递到第几个fragment,对于在Mainactivity中的fragmentList来说
public interface FragmentMessgeI {
void transferString(String s,int i);
}
之后再Mainactivity中实现该接口
@Override
public void transferString(String s,int i) {
switch (i){
case 0:
OneFragment fragment = (OneFragment) fragmentList.get(i);
fragment.SetText(s);
break;
case 1:
TwoFragment fragment1 = (TwoFragment) fragmentList.get(i);
fragment1.SetText(s);
break;
case 2:
ThreeFragment fragment2 = (ThreeFragment) fragmentList.get(i);
fragment2.SetText(s);
break;
}
}
然后在fragment中创建接口变量,并在onattach方法中实例化
@Override
public void onAttach(Context context) {
super.onAttach(context);
callback = (FragmentMessgeI) context;
}
最后就是正常的调用了
callback.transferString("接口从2跳到1",0);
public void SetText(String s){
fg_tv.setText(s);
}
方法二:
通过广播
首先在fragment中创建广播
lass ReceiveBroadCast extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
SetText(intent.getStringExtra("text"));
}
}
然后注册
@Override
public void onAttach(Context context) {
super.onAttach(context);
callback = (FragmentMessgeI) context;
receiveBroadCast = new ReceiveBroadCast();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.bai.three");
getActivity().registerReceiver(receiveBroadCast,intentFilter);
}
@Override
public void onDestroy() {
super.onDestroy();
if (receiveBroadCast!=null){
getActivity().unregisterReceiver(receiveBroadCast);
}
}
最后在需要传递数据的fragment中发送
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button:
callback.transferString("接口从2跳到1",0);
Intent intent = new Intent();
intent.putExtra("text","广播从2到3");
intent.setAction("com.bai.three");
getActivity().sendBroadcast(intent);
break;
}
}
第三种方法:
通过获取fragment实例:
首先在MainActivity中保存fragment实例
然后在fragment中获取实例
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button:
callback.transferString("接口从1跳到2",1);
MainActivity mainActivity = (MainActivity) getActivity();
ThreeFragment threeFragment = (ThreeFragment) mainActivity.fragmentList.get(2);
threeFragment.SetText("直接获取实例从1到3");
break;
}
}