Android Fragment与activity交互方式
2016-01-07 11:16
429 查看
一共总结了三种方式:
一、handler:
二、bundle:
三、接口:
一、handler:
首先我们来介绍使用Handler来实现Fragment与Activity 的交互。 第一步,我们需要在Activity中定义一个方法用来设置Handler对象。 public void setHandler(Handler handler) { mHandler = handler; } 第二步,在Fragment中的回调函数onAttach()中得到Fragment所在Activity,并调用setHandler方法,设置Handler。该Handler在Fragment中定义,用来接收消息与Fragment进行交互。 @Override public void onAttach(Activity activity) { super.onAttach(activity); mActivity = (MainActivity) activity; mActivity.setHandler(mHandler); } public Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 1: text.setText((String) msg.obj); break; } }; }; 然后我们可以在Activity中发送消息给Fragment中的Hanlder进行交互。 public void inter(View view) { Message msg = new Message(); msg.obj = edit.getText().toString(); msg.what = 1; mHandler.sendMessage(msg); }
二、bundle:
首先我们需要在Activity中动态添加Fragment时,用Bundle封装我们需要传递的数据。 public void button(View view) { ArgFragment arg = new ArgFragment(); Bundle bundle = new Bundle(); bundle.putString("arg", edit.getText().toString()); arg.setArguments(bundle); FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.layout_fragment, arg); ft.commit(); } 然后在Fragment的回调函数中通过Fragment提供的方法getArguments()取出Bundle对象。 text = (TextView) view.findViewById(R.id.text); Bundle bundle = getArguments(); text.setText(bundle.getString("arg"));
三、接口:
第一步:我们需要在Fragment中定一个接口,并确保我们的容器Activity实现了此接口: public interface onTestListener { public void onTest(String str); } @Override public void onAttach(Activity activity) { super.onAttach(activity); // 这个方法是用来确认当前的Activity容器是否已经继承了该接口,如果没有将抛出异常 try { mCallback = (onTestListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener"); } } 第二步:在我们的容器Activity中实现此接口,并实现接口中的方法。 public class MainActivity extends Activity implements onTestListener { ...... @Override public void onTest(String str) { text.setText(str); } 第三步:我们在fragment执行某些特定的操作时,调用接口中声明的方法。 @Override public void onClick(View v) { mCallback.onTest(edit.getText().toString()); }
相关文章推荐
- Android View与GroupView原理以及其子类描述
- 获取Android屏幕尺寸、控件尺寸、状态栏/通知栏高度、导航栏高度
- Android 自定义标题栏背景
- Android的JS调用Java代码或使用了Javascript相关技术,混淆问题
- 更换android开机动画须选择好正确的压缩格式
- android-dev-com
- android-dev-cn
- Cordova编译Android 22 以上版本,中文目录出错问题的解决办法
- Android学习:自定义ViewGroup方法总结
- 160多个android开源代码汇总
- 4种Android获取View宽高的方式
- android sdk 版本与api对应
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- Android横竖屏总结
- Android Wear创建一个通知
- Android 原生加载框
- 高德地图 android 设置完全自定义的InfoWindow
- Activity和Service的交互
- 【Android】实现XML解析的几种技术
- Android权限总结