ViewPager Activity to notify a Fragment of a specific event

后端 未结 6 1482
无人及你
无人及你 2020-12-08 02:59

I have a ViewPager and it is using a FragmentAdapter in order to display several fragments of the same kind. Although these Fragments are basicall

6条回答
  •  情歌与酒
    2020-12-08 03:28

    I had the same issue but fixed it with a localBroadcastReceiver like this:

    Create a receiver in your activity and register it:

     /**
     * ******************************
     * Receiver to process the message
     * *******************************
     */
    private BroadcastReceiver onNotice = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //You can send any extra data if you need like this
            final int type = intent.getIntExtra("fragment.data", -1);
            Log.d(tag, "main class: " + type);
            //also refresh your fragment like this
            mViewPager.getViewPager().getAdapter().notifyDataSetChanged();
        }
    };    
    
    @Override
    protected void onResume() {
        super.onResume();
    
        //Register a localbroadCast with the your filter
        IntentFilter thinaireFilter = new IntentFilter("your.filter");
        LocalBroadcastManager.getInstance(this).registerReceiver(onNotice, thinaireFilter);
    }
    

    Remember to remove LocalBroadCast

    //remove the LocalBroadCast when no need it
    @Override
    protected void onPause() {
        super.onPause();
        LocalBroadcastManager.getInstance(this).unregisterReceiver(onNotice);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        LocalBroadcastManager.getInstance(this).unregisterReceiver(onNotice);
    }
    

    Send your broadcast from anywhere you want Adapters, services, etc.

    Intent sendBroadCastData = new Intent("your.filter");
    sendBroadCastData.putExtra("fragment.data", myData);
    LocalBroadcastManager.getInstance(context).sendBroadcast(sendBroadCastData);
    

    Hope it helps others.

提交回复
热议问题