【问题标题】:LocalBroadcastManager onReceive() not called未调用 LocalBroadcastManager onReceive()
【发布时间】:2015-03-24 12:35:37
【问题描述】:

这就是我正在做的:

我正在使用LocalBroadcastManager 将意图从MainActvity 发送到我的Fragment。我在 Fragment 类的onCreateView() 中编写了onReceive() 代码。我正在注销onDestroy() 中的接收器。

但是onReceive() 没有被调用。为什么?

MainActivity 类中:

   void handleText()
{ 
          Intent i = new Intent("receiveURL");
          i.putExtra("key", sharedText);

          this.sendBroadcast(i);
}

在我的 Fragment 类中:

public class AddTab extends Fragment implements View.OnClickListener {

    BroadcastReceiver  receiver;

    EditText textBox;

        @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        view = inflater.inflate(R.layout.fragment_add, container, false);

        textBox = (EditText) view.findViewById(R.id.editText);

        receiver = new BroadcastReceiver() {
//This is not getting called
            @Override
            public void onReceive(Context context, Intent intent) {
                String g = intent.getStringExtra("key");
                textBox = (EditText) getView().findViewById(R.id.editText);
                if (textBox != null){
                    textBox.setText(g);}
                else{
                    Log.d("NULL", "");
                }

                Log.d("received","");
                }
            };

      LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver, new IntentFilter("receiveURL"));
...
//some code
    }


    public void onDestroy() {


         super.onDestroy();
         LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(receiver);
    }

}

为什么没有调用该接收器?有什么帮助吗?

【问题讨论】:

    标签: android android-intent broadcastreceiver android-broadcast localbroadcastmanager


    【解决方案1】:

    您正在使用this.sendBroadcast(i),它发送一个全局的应用间广播,LocalBroadcastManager 不会收到该广播。

    在您的MainActivity 中,替换

    this.sendBroadcast(i);
    

    LocalBroadcastManager.getInstance(this).sendBroadcast(i);
    

    这会起作用。

    【讨论】:

    • 我得到这个:非静态方法 sendBroadcast() 不能从静态上下文访问。
    • 请一分钟,模拟器正在加载中。
    • 我知道这与这个问题无关。但有一件事 - 我能够进入 onReceive() 方法。但是 textBox.setText() 不起作用。 setText () 是否在片段中工作?我的意思是我应该附加和分离片段吗?我看不到填充的文本框。任何帮助@ZygoteInit?
    • @nikhil:将其作为一个新问题发布,然后在这里给我链接如何? :)
    • 好的!凉爽的。谢谢。 :)
    【解决方案2】:

    从 onPause() 中删除接收器 unregister() 后我的问题得到解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多