大佬教程收集整理的这篇文章主要介绍了android – 嗯? findViewById()无法在onReceive()里面调用?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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,或者更直接地将上下文传递给您想要操作的视图.
// 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,请注明来意。