2017-06-20 16 views
0

私はこれを研究しており、チェックボックスでドローイング可能なソリューションを見つけることができません。私がしようとしているのは、この特定のチェックボックスをクリックすると、対応する色のチェックボックスがフィルタリングされます。これは途中で断片化しています。だから、赤色、黄色、緑色のチェックボックスがあります。ユーザーがクリックすると、色が変わります。たとえば、私はchkProgressである黄色のチェックボックスを持っています。クリックすると、黄色のチェックボックスをすべて探し、黄色のチェックボックスをフィルタしたいと思います。だから、私はdrawableのIDを持っている、と私はdrawablesをその色であるチェックボックスを見つけることができるようにする必要があります。ユーザーがchkProgressをクリックしたときに黄色のチェックボックスにフィルタをかけたいと思っています。だから、ここに私のコードは次のとおりです。Android - 複数のチェックボックスを含むチェックボックスをクリックして、ドロワーブルでチェックボックスをフィルタリングする方法

ここ
private CheckBox [] checkBoxes = new CheckBox[2]; 

checkBoxes[0] = chkStart; 
checkBoxes[1] = chkDownload; 

private Drawable yellowDrawable = getResources().getDrawable(R.drawable.custom_yellow_checkbox); 

chkInProgess.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (chkInProgess.isChecked()){ 
       //something here 
       if (chkStart.getDrawable == yellowDrawable) // need proper code here or a for loop to do this efficiently. 
      } else if (!chkInProgess.isChecked()){ 
       chkInProgess.setChecked(true); 
      } 
     } 
    }); 

は、私は、彼らが黄色である場合に確認する必要がありますチェックボックスです:彼らは、特定の色であればここで

chkStart.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      countStart = checked(chkStart, countStart); 
      editor.putInt(CHECK_START_ID, countStart); 
      editor.apply(); 
     } 
    }); 

chkDownload.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      countDownload = checked(chkDownload, countDownload); 
      editor.putInt(CHECK_DOWNLOAD_ID, countDownload); 
      editor.apply(); 
     } 
    }); 

は、チェックボックスをチェックするための方法であり、 :私はアプリを再開したときにここで

public int checked(CheckBox checkBox, int count){ 
    if (checkBox.isChecked()){ 
     count++; 
    } else if (!checkBox.isChecked()){ 
     checkBox.setChecked(true); 
     count++; 
    } 
    if (count == 1){ 
     checkBox.setButtonDrawable(R.drawable.custom_yellow_checkbox); 
    } 
    if (count == 2){ 
     checkBox.setButtonDrawable(R.drawable.custom_green_checkbox); 
    } 
    if (count > 2){ 
     count = 0; 
     checkBox.setButtonDrawable(R.drawable.custom_red_checkbox); 
    } 
    return count; 
} 

はメソッドです:

@Override 
public void onResume() { 
    super.onResume(); 

    start = mSharedPreferences.getInt(CHECK_START_ID, 0); 
    start = idChecked(chkStart, start); 
    countStart = start; 

    download = mSharedPreferences.getInt(CHECK_DOWNLOAD_ID, 0); 
    download = idChecked(chkDownload, download); 
    countDownload = download; 
} 

したがって、私はdrawablesを取得し、その色であるチェックボックスに一致させようとしています。私は私を助ける何かを見つけることができません。どんな助けでも大歓迎です。ありがとう!

+0

モデルに状態表現を持たせるのは理にかなっていませんか? – snowCrabs

答えて

0

問題を見つけました。チェックされたメソッドの場合と同じように、チェックボックスの数が特定の数であるかどうかをチェックするメソッドを作成しました。その番号のチェックボックスを表示するかどうかを設定します。

public int colorCheckYellow(CheckBox checkbox, int value){ 
    if (value == 1) 
     checkbox.setVisibility(View.VISIBLE); 
    else 
     checkbox.setVisibility(View.GONE); 
    return value; 
} 

は、その後、私はこのようにそれを呼び出す:

chkInProgess.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (chkInProgess.isChecked()) { 
       countStart = colorCheckYellow(chkStart, countStart); 
       countDownload = colorCheckYellow(chkDownload, countDownload); 
      }else if (!chkInProgess.isChecked()) { 
       checkboxVisible(); 
      } 
    } 

私はすべてを動作させるためにだけでなく、いくつかの他のコードを持っていますが、それはそれでした!

関連する問題