2011-01-11 3 views
0

У меня есть 2 проблемы.Проблема с проверкой всех флажков

1-я проблема.
У меня есть элемент CheckedTextView «Выбрать все» и список элементов массива, установленных в адаптере MutipleChoice. В настоящее время я пытаюсь установить состояние всех флажков элементов массива в true/false, выбрав CheckedTextView. Он работает, но есть ошибка. Таким образом, когда последний элемент массива имеет значение true, «SelectAll» в true будет работать, но если последний элемент массива имеет значение false, он отключит все элементы. То, что я хочу, даже если какое-либо из состояния элемента является ложным, будет установлено значение true, когда checkedtextview будет выбрано значение true.

Вторая проблема.
Кажется, я не могу установить checktextview в true, когда все состояние элемента массива истинно.

Может быть, я делаю это неправильно? Помощь дал бы оценил ..

Это мой метод для CheckedTextView «Select All»

private void markAll (Boolean state) { 

    for (int i = 0; i < lv.getCount(); i++) { 
     lv.setItemChecked(i, state); 
    }   
} 

Это кодирование для проверки состояний элементов массива

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    for(int i = 0; i < lv.getCount(); i++) { 
     //if even 1 of the item is false, the checkedtextview will be set to false 
     if(lv.isItemChecked(i) == false) { 
      ctv.setChecked(false); 
     } 
     //if all of the item is true, the checkedtextview will be set to true as well 
     //the coding should be done in the if-else below, if i'm not wrong 
     if(...) { 

     } 
    } 
} 

EDIT
Это новый код для вызова моего метода ctv.setOnClickListener (новый View.OnClickListener() {

 public void onClick(View v) { 
      // TODO Auto-generated method stub 
      ctv.setClickable(true); 
      if(ctv.isPressed() && ctv.isChecked() == false) { 
       ctv.setChecked(true); 
       markAll(true); 
      } 
      else { 
       ctv.setChecked(false); 
       markAll(false); 
      } 
     } 
    }); 

Это мой XML-код checkedtextview

<CheckedTextView 
     android:id="@+id/checkedtext" 
     android:layout_width="fill_parent" 
     android:layout_height="?android:attr/listPreferredItemHeight" 
     android:text="Select all" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:gravity="center_vertical" 
     android:clickable="true" 
     android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
     android:paddingLeft="6dip" 
     android:paddingRight="6dip"/> 

ответ

0

Try это переработанная логика:

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 

    ctv.setChecked(true); // assume true at first 

    // if even 1 of the item is false, the checkedtextview will be set to false 
    for(int i = 0; i < lv.getCount(); i++) { 
     if(lv.isItemChecked(i) == false) { 
      ctv.setChecked(false); 
      break; // exit loop if you have found one false 
     } 
    } 
} 

Это сделает ваш ctv иметь проверенное состояние, если все элементы в списке проверяются, в противном случае, если они являются ложными, тогда ctv будет иметь неконтролируемое состояние.

Для того, чтобы контролировать то, что происходит, когда вы щелкаете ctv сам:

ctv.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     if(ctv.isChecked()) { 
       markAll(true); // ctv is checked, so make all others checked 
     } 
     else { 
       markAll(false); // ctv is unchecked, so make all others unchecked 
     } 
    } 
}); 

Вам не нужно, чтобы проверить состояние других элементов здесь - если это просто «(де) выбрать все» кнопку, то она должна просто распространяйте свое собственное состояние на другие предметы.

+0

Вау! Быстрый ответ. И ... СПАСИБО ЭТО РАБОТАЕТ !!! Я не думал о том, чтобы добавить разрыв, и считая, что ctv верно 1-й. Большое спасибо человеку ^^. И можно ли задать другой вопрос? О CheckedTextView также .. –

+0

Конечно, вы можете :) Но вы, возможно, должны создать другой вопрос, а не добавлять к нему, если проблема может быть автономной сама по себе. Тогда другие могли видеть это более четко. – antonyt

+0

Хмм хорошо спасибо ^^ –

Смежные вопросы