栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

Android fragment间的通讯

Java 更新时间:发布时间: 百科书网 趣学号

1.使用FragmentPagerAdapter情况下

    
    private Fragment getViewPagerFragment(int viewpagerId,int position) {
        return getSupportFragmentManager().findFragmentByTag("android:switcher:"
                + viewpagerId + ":" + position);
    }

2.使用 FragmentStatePagerAdapter

    
    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 AA= context.getSupportFragmentManager().getFragments();
                    AlgorithmDataFragment algorithmDataFragment= (AlgorithmDataFragment) AA.get(4);
                    algorithmDataFragment.setCloseAlgorithmData(closeAlgorithm_wheel.getItem(closeSelectPosition).toString());
通讯方式二: 接口
  1. 在Menuragment中创建一个接口以及接口对应的set方法:
//MenuFragment.java文件中
public interface OnDataTransmissionListener {
    public void dataTransmission(String data);
}
public void setOnDataTransmissionListener(OnDataTransmissionListener mListener) {
    this.mListener = mListener;
}
  1. 在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));
        }
    }
});
  1. 在MainActivity中根据menuFragment获取到接口的set方法,在这个方法中进行进行数据传递,具体如下:
//在MainActivity.java中
menuFragment.setOnDataTransmissionListener(new MenuFragment.OnDataTransmissionListener() {
    @Override
    public void dataTransmission(String data) {
        mainFragment.setData(data);  //注:对应的mainFragment此时应该要用final进行修饰
    }
});
通讯方式三: eventbus
  • 该方法不是很靠谱,信息传递可能会出现漏发,重复发送的情况;
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1077893.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号