2017-11-04 3 views
0

私はSelect Allというボタンがあります。クリックすると、listviewcheck boxesがすべてチェックされます。同じボタンでテキストをClear Allに変更します。クリックするとすべてのチェックボックスがオフになり、テキストはSelect Allに戻ります。すべて選択/すべてクリアボタンをチェックし、チェックボックスをオフにしてみよう

私のlistviewでは、それはチェックされるかチェックされなくなります。

Select Allをクリックすると、checkbox 13と確認になる5Checkbox 2および4はチェックされなくなります。テキストはClear Allに変わります。

Clear Allをクリックすると、checkbox 1,3および5がチェックされなくなります。 Checkbox 2および4がチェックされます。テキストはSelect Allに変わります。

私のコードに何が間違っているかわかりません。または、アプリの別の部分にあるものかもしれませんが、エラーや警告はなく、デバッグを開始する場所がわかりません。ありがとう。

答えて

1

ループの最初のループは第二のループは再びそれを変更し、テキストを変更し、それがこの部分に変更され続けているので、truefalseからの変更を続けている内部状態(コメントを読む!):

if(btnCheckAll.getText().toString().equalsIgnoreCase("Select All")) {//This condition will be true on first round and 3 and 5 and 7... 
      checkbox.setChecked(true); 
      btnCheckAll.setText("Clear All"); 
     } 


      else if (btnCheckAll.getText().toString().equalsIgnoreCase("Clear All")){//And this one will be true in 2 and 4 and 6... 
        checkbox.setChecked(false); 
      btnCheckAll.setText("Select All"); 

SOLUTION:

btnCheckAll.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 
     boolean toCheck=true; 

     //THE CONDITION SHOULD BE OUTSIDE THE LOOP! 

if(btnCheckAll.getText().toString().equalsIgnoreCase("Select All")) { 
      toCheck=true; 
      btnCheckAll.setText("Clear All"); 
     } 


      else if (btnCheckAll.getText().toString().equalsIgnoreCase("Clear All")){ 
        toCheck=false; 
      btnCheckAll.setText("Select All"); 


     } 



     int count = MatchingContactsAsArrayList.size(); 
     for (int i = 0; i < count; i++) { 
     LinearLayout itemLayout = (LinearLayout) listView.getChildAt(i); // Find by under LinearLayout 
     CheckBox checkbox = (CheckBox) itemLayout.findViewById(R.id.checkBoxContact); 
     checkbox.setChecked(toCheck); 
    }} 
}); 
1

私は問題はここにあるかもしれないと思う:

if(btnCheckAll.getText().toString().equalsIgnoreCase("Select All")) { 
       checkbox.setChecked(true); 
       btnCheckAll.setText("Clear All"); 
}else if (btnCheckAll.getText().toString().equalsIgnoreCase("Clear All")){ 
         checkbox.setChecked(false); 
       btnCheckAll.setText("Select All"); 
} 

このifは、ループの内側にあるので、上の各ループ上のオフswich turiningとして機能しています。

各ループで、テキスト "Select All"/"Clear All"が変更されるので、次のループでボタン状態の評価が行われます。

関連する問題