4

クラスの 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()の呼び出しに制限はありますか?

または他の理由ですか?

4

1 に答える 1