2017-01-08 10 views
2

私はスイッチを使用する必要があるアンドロイドプロジェクトを持っています。 私はこのためにボタンを使用しています。 私はオン状態とオフ状態の2つのイメージを持っています。最初は "off_image"をButtonの背景として与えています。ユーザーがボタンをクリックすると、背景は「on_image」に変わり、再度クリックすると「off_image」に戻るはずです。私は以下のコードを使用していますが、それは動作していない代わりにボタンの背景を変更する

....

内のonClickメソッド--->

if(button.getBackground().equals(R.drawable.off_image) 
     button.setImageResource(R.drawable.on_image); 
if(button.getBackground().equals(R.drawable.on_image) 
     button.setImageResource(R.drawable.off_image); 

初心者として私を扱い、詳細な解決策を教えてください。

ありがとうございます。

+0

私はそれがR.drawable.off_imageであるべきだと思います。 – Keshav

答えて

0

OK、グローバルvar lastImageResourceを保存します。

if(lastImageResource == (R.id.off_image)){ 
     button.setImageResource(R.id.on_image); 
     lastImageResource = R.id.on_image; 
} 
if(lastImageResource == (R.id.on_image)){ 
     button.setImageResource(R.id.off_image); 
     lastImageResource = R.id.off_image; 
} 

今では動作するはずです:

int lastImageResource= R.id.off_image; 

今、あなたが背景を切り替えるたびに、このようにそれを更新します。

+0

私はsetBackgroundResourceを試しましたが、それも動作していません。 – MNOPM

+0

私は問題がgetBackground()であると思います – MNOPM

+0

それは、あなたはそれをデバッグしようとしていましたか? – omriherman

0

利用getConstantState()

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
        drawableDownloaded=holder.iv_catch_status.getDrawable().getConstantState() == context.getDrawable(R.drawable.ic_cloud_download).getConstantState(); 
       }else{ 
        drawableDownloaded=holder.iv_catch_status.getDrawable().getConstantState() == context.getResources().getDrawable(R.drawable.ic_cloud_download).getConstantState(); 
       } 

、あなたがR.id.imageを使用しているどのように来る画像

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
       this.statusImage.setImageDrawable(context.getDrawable(R.drawable.ic_play)); 
      }else{ 
       this.statusImage.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_play)); 

      } 
0

を設定します。

これらはドロワーブルです。R.drawable.imageを使用してください。

また、

あなたは、ImageResourceを設定しますが、背景をチェックしています。 どちらも違うものです。

なぜbooleanを使用しないのですか?

boolean isOn = false

そして、それを切り替えます。

+0

申し訳ありません、入力ミスです。私のコードではdrawableを使っています – MNOPM

0

が一定の状態を比較すると次のようにsetBackgroundResource()を使用:

final Button button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (button.getBackground().getConstantState().equals(getDrawable(R.drawable.ic_menu_camera).getConstantState())){ 
       button.setBackgroundResource(R.drawable.ic_menu_gallery); 
      } 
      else if(button.getBackground().getConstantState().equals(getDrawable(R.drawable.ic_menu_gallery).getConstantState())){ 
       button.setBackgroundResource(R.drawable.ic_menu_camera); 
      } 
     } 
    }); 

minSdkVersion代わりgetDrawable()方法未満の21使用getResources().getDrawable()ある場合。

+0

うまくいきましたが、 "getDrawable(int)deprecated"というメッセージがあります。 – MNOPM

+0

それは危険であるか安全性が低く、代替手段が通常存在するので、この方法はGoogleによって使用されることが推奨されていません。代わりにContextCompat.getDrawable()メソッドを使用してください。 _button.getBackground()。getConstantState()。equals(ContextCompat.getDrawable(getApplicationContext()、R.drawable.ic_menu_camera).getConstantState())_としてコードを変更します。 – sats

関連する問題