简体   繁体   English

从广播接收器更改片段?

[英]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(): 有关getFragmentManager()的问题:

Cannot make a static reference to the non-static method getFragmentManager() from the type Activity 无法从活动类型静态引用非静态方法getFragmentManager()

you can remove the static modifier from the class definition. 您可以从类定义中删除static修饰符。

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 . 这样,您就可以访问外部环境,并且如果它是Activity的实例,则可以访问getFragmentManager / getSupportFragmentManager

Edit: 编辑:

To register your BroadCast receiver programmatically 以编程方式注册您的BroadCast接收器

Declare as member variable 声明为成员变量

NetworkChangeReceiver mNetworkChangeReceiver;

onCreate: 的onCreate:

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

and onDestroy unregister it: 然后onDestroy取消注册:

unregisterReceiver(mNetworkChangeReceiver);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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