当你在实现Fragment之间的通信时(例如Fragment_A和Fragment_B),可能会想到的方法是在Fragment_B中对外提供一个接口,然后在Fragment_A中去调用这个接口,并把这需要的参数传递过去。

下面我将对利用广播来实现从Fragment_A向Fragment_B传递数据。

主界面:

public class MainActivity extends FragmentActivity {private int getLayoutResID() {return R.layout.activity_main;}private MyViewPagerAdapter mAdapter = null;private final int START_ITEM = 0;private ViewPager mDataViewPager = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(getLayoutResID());initEvent();}/*** 初始化事件*/private void initEvent() {initView();}/*** 初始化界面*/private void initView() {initWidgets();}/*** 初始化控件*/private void initWidgets() {mDataViewPager = (ViewPager) findViewById(R.id.activity_main_show_viewpager);mAdapter = new MyViewPagerAdapter(getSupportFragmentManager());mAdapter.setContext(MainActivity.this);mDataViewPager.setAdapter(mAdapter);mDataViewPager.setCurrentItem(START_ITEM);}
}

适配器:

public class MyViewPagerAdapter extends FragmentStatePagerAdapter {public static final int FRAGMENT_VIEWPAGER_PAGE_COUNT = 2;private Context mContext;public MyViewPagerAdapter(FragmentManager fm) {super(fm);}public void setContext(Context context) {mContext = context;}@Overridepublic Fragment getItem(int which) {try {switch (which) {case 0:return PageOneFragment.newInstance();case 1:return PageTwoFragment.newInstance();default:break;}} catch(Exception e) {e.printStackTrace();}return PageOneFragment.newInstance();}@Overridepublic int getCount() {return FRAGMENT_VIEWPAGER_PAGE_COUNT;}
}

第一个Fragment:

public class PageOneFragment extends Fragment {public static PageOneFragment newInstance() {PageOneFragment fragment = new PageOneFragment();return fragment;}private int getLayoutResID() {return R.layout.fragment_page_0;}public static final String TAG = PageOneFragment.class.getName();private TextView mShowTextView = null;private Button mSendButton = null;private static final int MESSAGE_UPDATEVIEW = 0x123;private PageTwoDataChangedReceiver mReceiver = null;public static final String DATA_CHANGED = "com.example.viewpager.communication.fragment.PAGE_ONE_DATA_CHANGED";@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(getLayoutResID(), container, false);initEvent(view);return view;}private void initEvent(View v) {initView(v);registerPageTwoDataChangedReceiver();}private void initView(View v) {initWidgets(v);setViewOnclickEvent();}private void initWidgets(View v) {mShowTextView = (TextView) v.findViewById(R.id.page_0_show_textview);mSendButton = (Button) v.findViewById(R.id.page_0_send_button);}/*** 对所有的按钮进行点击事件监听*/private void setViewOnclickEvent() {mSendButton.setOnClickListener(viewOnClickListener);}private OnClickListener viewOnClickListener = new OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.page_0_send_button:Intent intent = new Intent();intent.setAction(PageTwoFragment.DATA_CHANGED);getActivity().sendBroadcast(intent);break;default:break;}}};private void registerPageTwoDataChangedReceiver() {IntentFilter filter = new IntentFilter();try {if (mReceiver != null) {getActivity().unregisterReceiver(mReceiver);}} catch (Exception e) {e.printStackTrace();}mReceiver = new PageTwoDataChangedReceiver();filter.addAction(PageOneFragment.DATA_CHANGED);getActivity().registerReceiver(mReceiver, filter);}Handler handler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case MESSAGE_UPDATEVIEW:updateView((String)msg.obj);break;default:break;}};};private void updateView(String data) {mShowTextView.setText("从第二页发来的数据:" + data + " " + System.currentTimeMillis());}class PageTwoDataChangedReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(PageOneFragment.DATA_CHANGED)) {String label = "TWO Time: ";Message msg = new Message();msg.what = MESSAGE_UPDATEVIEW;msg.obj = label;handler.sendMessage(msg);}}}@Overridepublic void onDestroy() {if (mReceiver != null) {getActivity().unregisterReceiver(mReceiver);}super.onDestroy();}
}

第二个Fragment:

public class PageTwoFragment extends Fragment {public static PageTwoFragment newInstance() {PageTwoFragment fragment = new PageTwoFragment();return fragment;}private int getLayoutResID() {return R.layout.fragment_page_1;}public static final String TAG = PageTwoFragment.class.getName();private static final int MESSAGE_UPDATEVIEW = 0x123;private TextView mShowTextView = null;private Button mSendButton = null;private PageOneDataChangedReceiver mReceiver = null;public static final String DATA_CHANGED = "com.example.viewpager.communication.fragment.PAGE_TWO_DATA_CHANGED";@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(getLayoutResID(), container, false);initEvent(view);return view;}private void initEvent(View v) {initView(v);registerPageOneDataChangedReceiver();}private void initView(View v) {initWidgets(v);setViewOnclickEvent();}private void initWidgets(View v) {mShowTextView = (TextView) v.findViewById(R.id.page_1_show_textview);mSendButton = (Button) v.findViewById(R.id.page_1_send_button);}/*** 对所有的按钮进行点击事件监听*/private void setViewOnclickEvent() {mSendButton.setOnClickListener(viewOnClickListener);}private OnClickListener viewOnClickListener = new OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.page_1_send_button:Intent intent = new Intent();intent.setAction(PageOneFragment.DATA_CHANGED);getActivity().sendBroadcast(intent);break;default:break;}}};private void registerPageOneDataChangedReceiver() {IntentFilter filter = new IntentFilter();try {if (mReceiver != null) {getActivity().unregisterReceiver(mReceiver);}} catch (Exception e) {e.printStackTrace();}mReceiver = new PageOneDataChangedReceiver();filter.addAction(PageTwoFragment.DATA_CHANGED);getActivity().registerReceiver(mReceiver, filter);}Handler handler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case MESSAGE_UPDATEVIEW:updateView((String)msg.obj);break;default:break;}};};private void updateView(String data) {mShowTextView.setText("从第一页发来的数据:" + data + " " + System.currentTimeMillis());}class PageOneDataChangedReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(PageTwoFragment.DATA_CHANGED)) {String label = "ONE Time: ";Message msg = new Message();msg.what = MESSAGE_UPDATEVIEW;msg.obj = label;handler.sendMessage(msg);}}}@Overridepublic void onDestroy() {if (mReceiver != null) {getActivity().unregisterReceiver(mReceiver);}super.onDestroy();}
}

工程源码:

布局文件比较简单,这里不再给出。如下为项目源码。

http://download.csdn.net/detail/u013761665/8333283

笔者最新开发的应用连接

http://zhushou.360.cn/detail/index/soft_id/2419729?recrefer=SE_D_%E6%A3%B1%E9%95%9C

http://www.wandoujia.com/apps/com.mastershield.personalstat

Android利用广播实现ViewPager中item之间的数据通信相关推荐

  1. Android 利用广播实现黑名单【指定号码】的短信的拦截 附源码下载链接

    Android 利用广播实现指定号码的短信的拦截 根据最近的学习内容,今天实现了利用广播进行指定号码的拦截 步骤: ①.写一个数据库的帮助类,实现对数据库的创建,总共创建两个数据库psms(受保护的短 ...

  2. android 程序退出广播,android 利用广播实现程序的强制退出

    利用广播机制,实现程序的强制退出. 前面有篇博文,写到了一键退出,这里利用到了那里的ActivityCollector的集合和BaseActivity 功能:打开程序后,先登录,登录成功后,进入主页面 ...

  3. Android利用SpannableStringBuilder设置TextView中部分文字的颜色...

    原文:android - SpannableString或SpannableStringBuilder以及string.xml文件中的整型和string型代替 背景介绍 在开发应用过程中经常会遇到显示 ...

  4. Android 利用广播实现短信的自动转发

    由于初学(菜)的原因,没有考虑到在6.0版本以上需要权限的问题,等到期末考试后会及时进行更新 初学安卓,代码结构略显混乱,有任何问题欢迎提出! 界面 布局 布局中主要有四个元素,分别为设置号码,清除号 ...

  5. android设置点击间隔,巧用android:divider属性设置LinearLayout中元素之间的间隔

    如上图,要想实现3个button线性排列并且使它们的大小相同.间隔相等.而且整体填充满整个linearlayout,我们一般的做法是在每两个button之间放一个固定宽度的view,然后设置butto ...

  6. android耳机广播,Android利用广播实现耳机的线控

    [实例简介] 借助广播来实现单按钮耳机的线控,能够识别单击和双击 代码讲解在我的博客里: http://blog.csdn.net/illidantao/article/details/1684790 ...

  7. Android listView item之间调整间距,listView去掉下滑线

    1. 调整item之间的间距 最近做列表需求的时候,发现需要修改listview的item之间的间距.在自定义的item中,使用padding就可以修改view的间距.具体代码如下: <?xml ...

  8. Android 利用V4L2 预览MJPEG格式 USB camera

    介绍 上一篇文章Android 利用V4L2 调用camera介绍了使用V4L2 接口预览camera的基本方法.目前接触过的usb camera支持的图像格式基本上只包括3种: YUV MJPEG ...

  9. android listview中item通过viewpager实现

    android listview中item通过viewpager实现 android listview中item通过viewpager实现,每一个item都支持viewpager实现图片切换功能.本项 ...

最新文章

  1. php %3c php 攻击,web 攻击靶机解题过程
  2. ARMv8/ARMv9指令集概述
  3. 上海图书馆 计算机软件,上海图书馆上海科技情报研究所招聘信息
  4. 想让马云成为你的老大?揭秘阿里面试情景
  5. Kubernetes 的原理
  6. 通过Python扫描代码关键字并进行预警
  7. Vue.js仿QQ音乐(移动端)
  8. 七个非常好用的黑科技APP,免费/小众/超实用,一次性全给你
  9. Activiti6常见错误汇总
  10. 腾讯地图获取地址的经度和纬度
  11. 模拟退火算法求解超市布局问题
  12. PDF太大怎么办?缩小PDF的4种常用方法
  13. 偏导数,全导数,方向导数,偏微分,全微分,梯度
  14. 360极速浏览器配置Chromedrive
  15. [框架]高并发中的惊群效应
  16. MircoPython 的组件扩展方法
  17. DataSec数据防泄密系统
  18. 关于excel中一部分表格显示但打印时不打印呢
  19. php识别word语言,PHP读取word文档
  20. 使用深度优先搜索算法解决迷宫问题

热门文章

  1. C++ Primer 5th笔记(chap 14 重载运算和类型转换)函数调用运算符
  2. 6. Qt 信号与信号槽 (7)-QMetaObject:: activate
  3. 数学建模_随机森林分类模型详解Python代码
  4. 数学建模——K-means聚类模型Python代码
  5. Kubernetes中部署Docker registry2.7.1并通过containerd实现拉取镜像到应用Pod的部署
  6. [crypto]-05.1-PKCS PKCS#1 PKCS#7 PKCS#11的介绍
  7. [download]-软件下载地址-百度网盘
  8. HTML头部元素标签
  9. FileLocatorPro正则表达式批量搜索文件中的字符串
  10. android判断模拟器的三种方法