クラスの 1 つで、受信したブロードキャストに応答して (メイン レイアウト内の) ビューにアクセスしようとしています。
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()の呼び出しに制限はありますか?
または他の理由ですか?