简体   繁体   中英

Change Fragment from Broadcast Receiver?

I am trying to update a fragment in my activity from a static broadcast receiver - but it doesnt work

public static class NetworkChangeReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(final Context context, final Intent intent) {


           FragmentManager fm = getFragmentManager();

            FragmentTransaction fragmentTransaction = fm.beginTransaction();

            fragmentTransaction.replace(R.id.container, new Fragment1());

            fragmentTransaction.commit();


        }
    }

there is a problem about getFragmentManager():

Cannot make a static reference to the non-static method getFragmentManager() from the type Activity

you can remove the static modifier from the class definition.

public class NetworkChangeReceiver extends BroadcastReceiver {

this way you have access to the outer environment, and, if it is an instance of Activity , you can access getFragmentManager / getSupportFragmentManager .

Edit:

To register your BroadCast receiver programmatically

Declare as member variable

NetworkChangeReceiver mNetworkChangeReceiver;

onCreate:

mNetworkChangeReceiver = new NetworkChangeReceiver()
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(mNetworkChangeReceiver, intentFilter);  

and onDestroy unregister it:

unregisterReceiver(mNetworkChangeReceiver);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM