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