Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 嗯? findViewById()无法在onReceive()里面调用?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的一个课程中,我尝试访问一个View(在我的主布局中)以响应收到的广播:

protected BroadcastReceiver myReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context ctx,Intent intent) {
      String action = intent.getAction();
      if ( action.equals("com.mydomain.myapp.INTERESTinG_EVENT_OCCURRED") ) {
        ((Activity) ctX).setContentView(R.layout.main);
        LinearLayout linLayout = (LinearLayout) findViewById(R.id.lin_layout);
        if (linLayout != null) {
          Log.i(tag_OK,"OK to proceed with accessing views inside layout");
        }
        else
          Log.e(tag_FAIL,"what's wrong with calling findViewById inside onReceive()?");
      }
    }       
  };

问题是findViewById()总是返回null,因此我总是得到TAG_FAIL错误消息.

在活动的onCreate()调用相同的findViewById(R.id.lin_layout)会返回所需的结果,所以我知道这不是上面引用的代码中的拼写错误或其他错误.

为什么会这样?

BroadcastReceiver内拨打findViewById()是否有限制?

还是其他一些原因?

解决方法

BroadcastReceiver是它自己的类,不会从android.app.Activity继承,是吗?因此,按照这种逻辑,你不能指望它包含Activity的方法.

将上下文传递给BroadcastReceiver,或者更直接地将上下文传递给您想要操作的视图.

// package protected access
LinearLayout linLayout;

onCreate()
{
    super.onCreate(savedInstanceStatE);
    setContentView(R.layout.main);
    linLayout = (LinearLayout) findViewById(R.id.lin_layout);
}

protected BroadcastReceiver myReceiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context ctx,Intent intent)
    {
        String action = intent.getAction();
        if ( action.equals("com.mydomain.myapp.INTERESTinG_EVENT_OCCURRED"))
        {
            if (linLayout != null)
            {
                Log.i(tag_OK,"OK to proceed with accessing views inside layout");
            }
            else
                Log.e(tag_FAIL,"what's wrong with calling findViewById inside onReceive()?");
            }
        }       
    };

大佬总结

以上是大佬教程为你收集整理的android – 嗯? findViewById()无法在onReceive()里面调用?全部内容,希望文章能够帮你解决android – 嗯? findViewById()无法在onReceive()里面调用?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。