Android uses broadcast to implement data communication between items in ViewPager

Source: Internet
Author: User

Android uses broadcast to implement data communication between items in ViewPager

When you implement communication between Fragment (for example, Fragment_A and Fragment_ B), you may think of a way to provide an external interface in Fragment_ B and then call this interface in Fragment_A, and pass the required parameters.

Next I will use broadcast to transmit data from Fragment_A to Fragment_ B.

Main Interface:

 

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; @ Override protected void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); this. requestWindowFeature (Window. FEATURE_NO_TITLE); setContentView (getLayoutResID (); initEvent ();}/*** initialization event */private void initEvent () {initView ();} /*** initialization interface */private void initView () {initWidgets ();}/*** initialization control */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 );}}

 

Adapter:

 

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;}}

 

First 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);}/*** click event listening for all buttons */private void setViewOnclickEvent () {mSendButton. setOnClickListener (viewOnClickListen Er);} 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; de Fault: break ;};}; private void updateView (String data) {mShowTextView. setText (data sent from the second page: + data ++ System. currentTimeMillis ();} class PageTwoDataChangedReceiver extends BroadcastReceiver {@ Override public void onReceive (Context context, Intent intent) {if (intent. getAction (). equals (PageOneFragment. DATA_CHANGED) {String label = TWO Time:; Message msg = new Message (); msg. what = MESSAGE_UPDATE VIEW; msg. obj = label; handler. sendMessage (msg) ;}}@ Overridepublic void onDestroy () {if (mReceiver! = Null) {getActivity (). unregisterReceiver (mReceiver) ;}super. onDestroy ();}}

 

Second 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 mSendButt On = 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 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_{show_textview); mSendButton = (Button) v. findViewById (R. id. page_sharesend_button);}/*** click event listening for all the buttons */private void setViewOnclickEvent () {mSendButton. setOnClickListener (viewOnClickListen Er);} private OnClickListener viewOnClickListener = new OnClickListener () {@ Overridepublic void onClick (View v) {switch (v. getId () {case R. id. page_prop 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 sent from the first page: + data ++ System. currentTimeMillis ();} class PageOneDataChangedReceiver extends BroadcastReceiver {@ Override public void onReceive (Context context, Intent intent) {if (intent. getAction (). equals (PageTwoFragment. DATA_CHANGED) {String label = ONE Time:; Message msg = new Message (); msg. what = MESSAGE_UP DATEVIEW; msg. obj = label; handler. sendMessage (msg) ;}}@ Override public void onDestroy () {if (mReceiver! = Null) {getActivity (). unregisterReceiver (mReceiver) ;}super. onDestroy ();}}

 

 

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.