2017-01-12 5 views
-4

findViewById()を非アクティビティクラスで使用するにはどうすればよいですか?以下は私のコードスニペットです。私は、エラーメッセージ "メソッドfindViewByIdを解決できません"が直接使用される場合があります。私はこのエラーを取得する(ImageViewのが利用可能である)クラスのコンストラクタを使用しようとすると非アクティビティクラスのFindViewById

public class MyBroadcastReceiver extends FirstBroadcastReceiver { 

Activity activity; 
public MyBroadcastReceiver(Context context, Activity activity){ 
    this.context=context;  // error here(cannot resolve symbol context) 
    this.activity=activity; 
} 

    @Override 
    protected void (Context context) { 
    // content 
    } 

    @Override 
    public void onButton(Context context, boolean isClick) { 

     if(isClick) { 

    ImageView blueImage = (ImageView)activity.findViewById(R.id.imageView); 
    blueImage.setColorFilter(0xff000000); 
     } 
    } 
....... 
.... 
    // and so on 

を「シンボルコンテキストを解決できない」と以下MybroadcastReceiverクラスと私のMainActivityはそれが正しいinstance.Isされますか?インテントをリッスン完全にバックグラウンドで

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // and so on 
    } 
} 


MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver(MainActivity.this,this); 

@Override 
public void onActivityResult() { 
    // some code 
    } 

@Override 
    public void onInitialized(MyManager manager){ 
// some code 
} 
+0

コンテキストパラメータとは何ですか?それがアクティビティの場合、それをアクティビティにキャストしてfindViewByIdを呼び出すことができます。そうしないと、 – WenChao

+0

待ち、「Receiver」は何ですか?私はあなたが 'BroadcastReceiver'を意味すると思いますか? –

+0

はいそれはBroadcastRecieverです – abdullah

答えて

0

BroacastReceiverの実行は、OSや他のアプリのいずれかによって送信されます。 UIのやり取りは一切責任を負わず、ビューにはアクセスできません。したがって、findViewByIdはBroadcastReceiver内で使用できません。

も参照してください - What is BroadcastReceiver and when we use it?

+0

私はまた、主な活動の中で機能を作り、それを私の放送で使ってみましたが、それでは、 "静的メソッドは静的コンテキストから参照できません"というこのエラーを私に与えるのですか? – abdullah

+1

注意すべきことは、 'BroadcastReceiver'はあなたのアプリのメインスレッド上で実行され、バックグラウンドスレッド上では実行されません。 – Karakuri

0

あなたはfindViewByid を使用する前に、非活動クラスにビューを渡すと contextBroadcastクラスでnullあるので

view.findViewByid(R.id.view_id); 
+0

msgstr "それは動作していませんmsg" msgstr "シンボルビューを解決できません。以前に他のguysiがBroadcastReceiverでfindViewbyidを直接使用することはできません。 – abdullah

+0

ブロードキャストレシーバは、ビューがnullのときにも機能するため、ブロードキャストレシーバでは機能しません。 アプローチを変更するか、コールバックメカニズム –

+0

を使用してみる必要があります。コールバックを使用する方法...メインアクティビティで機能を作成してブロードキャストで使用しようとしたときに、このエラーが発生します。 "静的メソッドは静的コンテキスト "とにかくその周りの – abdullah

0

を使用して試してみて下さい。渡すBroadcastクラスのコンストラクタを使用parent_activity(Where the imageView is available)コンテキストをBroadcastでコンテキストにアクセスするには:

public class Broadcast extends BroadCastReceiver { 

Activity activity; 
public Broadcast(Context context,Activity activity){ 
this.context=context; 
this.activity=activity; 
} 
....... 
    ....... //so on 

parent_activityにはBroadcastクラスのインスタンスを作成するようparent_activityコンテキストを渡すことによって:

Broadcast broadcast = new Broadcast(parent_activity.this,this); 

使用activityインスタンスとして:

@Override 
public void onButton(Context context, boolean isClick) { 

    if(isClick) { 
     ImageView blueImage = (ImageView) activity.findViewById(R.id.imageView); //<--- here 
    } 
} 
......... 
     ......... //so on 
+0

私はあなたのコードを使用してみましたが、今私のアプリクラッシュ...私はそのクラスのインスタンスのため、私は主な活動から使用していると思いますか? – abdullah

+0

@ abdullahどのようなエラーがありますか? – W4R10CK

+0

私はそれを実行するとアプリケーションがクラッシュしません。 – abdullah

関連する問題