Fragment与Activity的通信(回调),Fragment间的通信

来源:互联网 发布:网络seo 编辑:程序博客网 时间:2024/06/08 16:13

一、消息Fragment-->Activity

1、Fragment启动Activity时通过Intent将数据传递过去,这种方法每次都要重启Activity。

2、通过回调方法:

  2.1 普通的回调方法。


Fragment类中定义方法switch
private void switch(Fragment f) {if(f != null){if(getActivity() instanceof MainActivity){((MainActivity)getActivity()).switchFragment(f);}}}
       该方法MainActivity 的实例,实现调用MainActivity 中的方法实现通信。
       MainActivity类中对应的回调方法switchFragment(Fragment f)完成响应。

  2.2 通过接口实现回调:


    2.2.1 在Fragment类中定义接口及抽象方法,并在onAttach方法中添加如下代码:

private OnFragmentChangeListener mCallBack;public interface OnFragmentChangeListener {public void onTabSwitch(int position);}@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);//确保包含Fragment的Activity已经实现了回调接口,否则抛出异常try {mCallBack = (OnFragmentChangeListener) activity;} catch (Exception e) {throw new ClassCastException(activity.toString()+ " must implement OnFragmentChangeListener");}}

    2.2.2 在Activity中实现上面的接口:

public class TestActivity extends Activity implementsMyFragment.OnFragmentChangeListener {@Overridepublic void onTabSwitch(int position) {//此处接收事件的回调}}

    2.2.3 在Fragment将信息发送给父Activity:

mCallBack.onTabSwitch(pos);

      两种回调方法都很适用于通过Fragment切换Activity的页面。

二、消息从Activity-->Fragment

1、通过实例化一个Fragment

    在Activity中设置如下代码携带参数传递给Fragment:
Fragment2 newFragment = new Fragment2();Bundle args = new Bundle();args.putInt(Fragment2.ARG_KEY, position);newFragment.setArguments(args);getFragmentManager().beginTransaction().replace(R.id.frame, newFragment).commit();

   或者通过构造方法将数据传递给Fragment(官方不推荐):
Fragment2 newFragment = new Fragment2(arg1,arg2);


推荐做法:

1.1在Fragment中

public static MyFragment newInstance(String userName, String password) {MyFragment frgmt = new MyFragment();Bundle args = new Bundle();args.putString("userName", userName);args.putString("password", password);frgmt.setArguments(args);return frgmt;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (null != getArguments()) {String userName = getArguments().getString("userName");String password = getArguments().getString("password");}}


1.2Activity中调用:

MyFragment myFragment = MyFragment.newInstance("myName", "myPsw");


2、通过findFragmentById()或者findFragmentByTag()方法找到Fragment的实例:


MyFragment fragment = (MyFragment) getFragmentManager().findFragmentById(R.id.frame);if(fragment!=null){fragment.frgmtFunc();}

参考自:http://blog.csdn.net/xyz_lmn/article/details/8631195#t1













    

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 白毛衣用84变黄怎么办 白色貂毛衣变黄怎么办 蓝色T恤衣领汗積洗不掉怎么办 蓝色t恤衣领汗积洗不掉怎么办 羽绒服在衣柜里放黄了怎么办 白羽绒服放久了泛黄怎么办 白色t恤领子发黄怎么办 身体爱出油衣服领子总爱脏怎么办 白色衣服衣领净洗后变红怎么办 棒球服衣领洗变形怎么办 挂盐水手肿了怎么办 衣服买大了肩宽怎么办 买来的衣服肩宽怎么办 素描揉擦之后的黑点怎么办 扭脖子响了一下怎么办 画的眼线容易掉怎么办 做完眼线后眼睛肿了怎么办 洗眼线眼睛肿了怎么办 眼线留眼泪总是爱花妆怎么办 戴眼镜眼球外凸怎么办 修眉后的眉渣怎么办 内眼线容易晕妆怎么办 手抖不会画眼线怎么办 画眼线眼睛总眨怎么办 画眼线总是晕妆怎么办 眼线笔没用完干了怎么办 新的眼线笔干了怎么办 不涂口红没气色怎么办 眼线笔容易晕妆怎么办 眼线笔老是晕妆怎么办 眼线液老是晕妆怎么办 旋转眼线笔断了怎么办 眼睛去皮以后眉眼距窄怎么办 速写型总是画不准怎么办 速写人物不会打形怎么办 鼻头又圆又大怎么办 耳鸣嘴溃疡眼流泪上火怎么办 孩子看电视总挤眼睛怎么办 小孩老是咳嗽有痰怎么办 长时间看手机眼睛模糊怎么办 长时间看电脑眼睛模糊怎么办