1.使用FragmentPagerAdapter情况下
/**
*
* @param viewpagerId viewpager id eg:R.id.vp
* @param position fragment 的位置
* @return
*/
private Fragment getViewPagerFragment(int viewpagerId,int position) {
return getSupportFragmentManager().findFragmentByTag("android:switcher:"
+ viewpagerId + ":" + position);
}
2.使用 FragmentStatePagerAdapter
/**
* 获取fragment实例
*
* @param position fragment位置
* @return
*/
private Fragment getViewPagerFragment(int position) {
FragmentStatePagerAdapter f = (FragmentStatePagerAdapter) vpQuestion.getAdapter();
Fragment fragment = null;
if (f != null) {
//instantiateItem(pager, position) 方法会返回在position位置的fragment的引用。
//如果该fragment 已经实例化了,再次调用instantiateItem(pager,position)的时候,该方法并不会调用
//getItem()来再次实例化fragment,而是直接返回引用。
fragment = f.instantiateItem(vpQuestion, position);
}
return fragment;
}
通讯方式一:
1、在MainFragment中设置一个setData()方法,在方法中设置更改按钮名称;
//MainFragment.java文件中
public void setData(String string) {
bt_main.setText(string);
}
2、在MenuFragment中的ListView条目点击事件中通过标签获取到MainFragment,并调用对应的setData()方法,将数据设置进去,从而达到数据传递的目的。
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MainFragment mainFragment =
(MainFragment) getActivity()
.getSupportFragmentManager()
.findFragmentByTag("mainFragment");
mainFragment.setData(mDatas.get(position));
}
});
注: 如果使用viewpager 加载fragment,获取方式为:
List<Fragment> AA= context.getSupportFragmentManager().getFragments();
AlgorithmDataFragment algorithmDataFragment= (AlgorithmDataFragment) AA.get(4);
algorithmDataFragment.setCloseAlgorithmData(closeAlgorithm_wheel.getItem(closeSelectPosition).toString());
通讯方式二: 接口
- 在Menuragment中创建一个接口以及接口对应的set方法:
//MenuFragment.java文件中
public interface OnDataTransmissionListener {
public void dataTransmission(String data);
}
public void setOnDataTransmissionListener(OnDataTransmissionListener mListener) {
this.mListener = mListener;
}
- 在MenuFragment中的ListView条目点击事件中进行接口进行接口回调
//MenuFragment.java文件中
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
/**
* 方法二:采取接口回调的方式进行数据传递
*/
if (mListener != null) {
mListener.dataTransmission(mDatas.get(position));
}
}
});
- 在MainActivity中根据menuFragment获取到接口的set方法,在这个方法中进行进行数据传递,具体如下:
//在MainActivity.java中
menuFragment.setOnDataTransmissionListener(new MenuFragment.OnDataTransmissionListener() {
@Override
public void dataTransmission(String data) {
mainFragment.setData(data); //注:对应的mainFragment此时应该要用final进行修饰
}
});
通讯方式三: eventbus
- 该方法不是很靠谱,信息传递可能会出现漏发,重复发送的情况;