24737
ImageViewのsetImageResourceメソッドをつかってpopupwindowから画像を変更したいのですが、上手くいきません。  
どうすればいいのでしょうか。

```

    final PopupWindow mPopupWindow=new PopupWindow(Books_new.this);
    final View popupView=getLayoutInflater().inflate(R.layout.popup_icon, null);
    
    //ポップアップウィンドウでアイコン変更
    
    popupView.findViewById(R.id.btn_red).setOnClickListener(new View.OnClickListener(){
      @Override
      public void onClick(View v){
        ChangeToBlue(v);
      }
    });
    
    popupView.findViewById(R.id.btn_pink).setOnClickListener(new View.OnClickListener(){
      @Override
      public void onClick(View v){
        ChangeToRed(v);
      }
    });
    
    public static void ChangeToRed(View v){
      ImageView iIcon=(ImageView)v.findViewById(R.id.view_books_icon);
      iIcon.setImageResource(R.drawable.red_project);
    }
    public static void ChangeToBlue(View v){
      ImageView iIcon=(ImageView)v.findViewById(R.id.view_books_icon);
      iIcon.setImageResource(R.drawable.blue_project);
    }
    
```
CC BY-SA 3.0
2016-05-11T03:08:55.307
24735
2016-05-11T04:42:59.573
2016-05-11T04:26:07.763
3068
15279
question
android
Android ImageViewの画像の変更
```

    public static void ChangeToBlue(View v){
      ImageView iIcon=(ImageView)v.findViewById(R.id.view_books_icon);
      iIcon.setImageResource(R.drawable.blue_project);
    }
    
```

この`v.findViewById()`は、引数の`View`、`R.id.btn_red`の`id`を持つ`View`の子要素に対して検索を行っています。ですので、`null`が返ってくると思います。

メソッドの`static`を外して、以下のように`Activity`または`Fragment`の`View`全体に対して検索するように修正してみてください。もしこのメソッドが`Activity`や`Fragment`以外で実装されている場合は、それぞれが管理する`View`のルートの参照を取得できるようにしておく必要があります。

```

    public void ChangeToRed(View v){
      ImageView iIcon=(ImageView)findViewById(R.id.view_books_icon);
      // Fragmentの場合は、
      // ImageView iIcon=(ImageView)getView().findViewById(R.id.view_books_icon);
      iIcon.setImageResource(R.drawable.red_project);
    }
    
```
CC BY-SA 3.0
2016-05-11T04:42:59.573
24737
2016-05-11T04:42:59.573
5337
24735
answer