Android利用广播实现ViewPager中item之间的数据通信
生活随笔
收集整理的這篇文章主要介紹了
Android利用广播实现ViewPager中item之间的数据通信
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
當(dāng)你在實(shí)現(xiàn)Fragment之間的通信時(shí)(例如Fragment_A和Fragment_B),可能會(huì)想到的方法是在Fragment_B中對(duì)外提供一個(gè)接口,然后在Fragment_A中去調(diào)用這個(gè)接口,并把這需要的參數(shù)傳遞過去。
下面我將對(duì)利用廣播來實(shí)現(xiàn)從Fragment_A向Fragment_B傳遞數(shù)據(jù)。
主界面:
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;} }
第一個(gè)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);}/*** 對(duì)所有的按鈕進(jìn)行點(diǎn)擊事件監(jiān)聽*/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("從第二頁發(fā)來的數(shù)據(jù):" + 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();} }
第二個(gè)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);}/*** 對(duì)所有的按鈕進(jìn)行點(diǎn)擊事件監(jiān)聽*/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("從第一頁發(fā)來的數(shù)據(jù):" + 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();} }
工程源碼:
布局文件比較簡單,這里不再給出。如下為項(xiàng)目源碼。
http://download.csdn.net/detail/u013761665/8333283
筆者最新開發(fā)的應(yīng)用連接
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
總結(jié)
以上是生活随笔為你收集整理的Android利用广播实现ViewPager中item之间的数据通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android时间选择器对话框的使用
- 下一篇: Java 代码细节与优化(一)