Fragment与Activity之间传递数据
2017-09-04 本文已影响303人
weiyushuai
fragment 传递数据到activity 中 直接上代码:
- 以下代码可直接复制
/**
* 当FRagmen被加载到activity的时候会被回调
*
* @param activity
*/
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof FragmentInteraction) {
listener = (FragmentInteraction) activity;
} else {
throw new IllegalArgumentException("activity must implements FragmentInteraction");
}
}
@Override
public void onDetach() {
super.onDetach();
listener = null;
}
/**
* 定义了宿主activity必须实现的接口
*/
public interface FragmentInteraction {
/**
* Fragment 向Activity传递指令,这个方法可以根据需求来定义
*
* @param isTheme
*/
void isTheme(boolean isTheme);
}
/**
* 用来与外部activity交互的
*/
private FragmentInteraction listener;
- 第二步
再合适的位置把想要传递的数据,通过isTheme(true)传递,我这里是设置主题通过fragment改变MainActivity的tab颜色,此方法根据业务需要自己定义,比如传递对象,变量等.
- 第三步
宿主activity实现FragmentInteraction重写isTheme()方法拿到fragment的数据
- 下面是Activity像fragment传递数据
第一步再fragment 中定义该方法,重写fragment的onCreate方法,再onCreate把数据取出来,这样就完成了activity和fragment数据传递
public static TestFragment newInstance(boolean isTheme) {
Bundle bundle = new Bundle();
bundle.putBoolean("isTheme", isTheme);
TestFragment fragment = new TestFragment();
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
Bundle bundle = getArguments();
if (bundle != null) {
isTheme = bundle.getBoolean("isTheme");
}
super.onCreate(savedInstanceState);
}
- 第二步再宿主activity中 对fragment初始化
fragmentList.add(TestFragment.newInstance(true));
fragmentList.add(TestFragment.newInstance(false));
fragmentList.add(TestFragment.newInstance(true));
fragmentList.add(TestFragment.newInstance(false));
fragmentAdapter = new FragmentAdapter(getChildFragmentManager());
viewpager.setAdapter(fragmentAdapter);
tabLayout.setViewPager(viewpager);
在这里我这边是通过viewpager配合fragment 其他同理, getChildFragmentManager()由于是fragment嵌套fragment所以这里要使用getChildFragmentManager如果是activity嵌套fragment要使用getSupportFragmentManager
下篇讲述如何让viewpager不预加载