2013-10-25 4 views
0

Прежде всего, позвольте мне показать вам код, который у меня есть, чтобы сделать то, что говорит название.Как скрыть флажки с ListView

Но прежде, это то, как выглядит actitivy:

http://i.imgur.com/UzexgEA.jpg

Игнорировать кнопки, уже удалось скрыть их обоих, только флажки в каждой строке осталось.

Моя раскладка деятельность (один на скриншоте) является:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/findSelected" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:onClick="registrarAsistencia" 
     android:text="Registrar Asistencia" /> 

    <ListView 
     android:id="@+id/listaAlumnos" 
     android:layout_width="fill_parent" 
     android:layout_height="376dp" 
     android:layout_weight="2.29" /> 

    <Button 
     android:id="@+id/btnChecarBoxes" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:onClick="seleccionarTodosNinguno" 
     android:text="Seleccionar/Deseleccionar todo" /> 

</LinearLayout> 

А вот макет для содержимого списка в:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/rowTextView" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:padding="10dp" 
      android:textSize="16sp" 
      android:textStyle="bold"/> 

     <TextView 
      android:id="@+id/rowTextView2" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:padding="10dp" 
      android:textSize="16sp" 
      android:textStyle="italic"/> 

    </LinearLayout> 

    <CheckBox 
     android:id="@+id/CheckBox01" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:focusable="false" 
     android:padding="10dp" /> 
</RelativeLayout> 

я уже упоминал, что кнопки и флажки необходимо скрывать, это произойдет ТОЛЬКО, если будут выполнены определенные условия.

Я добавил в список просмотра setOnItemClickListener, который содержит следующий код:

mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View item, int position, long id) { 
        final Alumno Alumno = listAdapter.getItem(position); 
       if(!verEstadisticas){     
        Alumno.toggleChecked();   
        Toast.makeText(AlumnosAsistencia.this, Alumno.getNoControl() + " " + Alumno.getName(), Toast.LENGTH_LONG).show(); 
        final AlumnoViewHolder viewHolder = (AlumnoViewHolder) item.getTag(); 
        viewHolder.getCheckBox().setChecked(Alumno.isChecked()); 
        runOnUiThread(new Runnable() { 
         public void run() {    
          viewHolder.getCheckBox().setVisibility(View.GONE); 
         } 
        }); 
       }else{      
        // Here Im supposed to do something else, but check boxes needs to be hidden 
       }    
      } 
     }); 

Это код AlumnoViewHolder:

class AlumnoViewHolder { 
    private CheckBox checkBox; 
    private TextView textView1; 
    private TextView textView2; 

    public AlumnoViewHolder() { 
    } 

    public AlumnoViewHolder(TextView textView1, TextView textView2, CheckBox checkBox) { 
     this.checkBox = checkBox; 
     this.textView1 = textView1; 
     this.textView2 = textView2; 
    } 

    public CheckBox getCheckBox() { 
     return checkBox; 
    } 

    public void setCheckBox(CheckBox checkBox) { 
     this.checkBox = checkBox; 
    } 

    public TextView getTextView1() { 
     return textView1; 
    } 

    public void setTextView1(TextView textView1) { 
     this.textView1 = textView1; 
    } 

    public TextView getTextView2() { 
     return textView2; 
    } 

    public void setTextView2(TextView textView2) { 
     this.textView2 = textView2; 
    } 
} 

Как вы можете видеть, что я могу скрыть флажки только щелкнув его строку, где я получаю параметр «Элемент представления» и метод item.getTag(), однако я не могу найти способ сделать это за пределами метода onItemClick. I Googled для решений и нашел это:

for(int i=0; i < mainListView.getCount(); i++){ 
         RelativeLayout itemLayout = (RelativeLayout) mainListView.getChildAt(i); 
         CheckBox cb = (CheckBox) itemLayout.findViewById(R.id.CheckBox01); 
         cb.setVisibility(View.GONE); 
        } 

Однако, он не работал.

Кроме того, у меня есть другая незначительная проблема. На скриншоте вы можете увидеть активность. Теперь, если я установил флажок, а затем прокрутил вниз, «переместив» флажок за пределами экрана, а затем снова прокручивая этот флажок, флажок будет снят, что означает, что он не сохранил его статус. Как я могу убедиться, что он «запоминает» его статус, когда он находится за пределами экрана?

Извините мой английский и способ объяснить вещи, ха-ха.

Поблагодарили бы за помощь. Заранее спасибо!

ответ

0

Сведения о сохранении состояния флажка. Вам придется управлять этим самостоятельно. Необходимо сохранить состояние каждого флажка. Затем вам нужно будет обновить метод getView() вашего пользовательского адаптера, чтобы установить флажок состояния при возврате представления. Если вы не используете пользовательский адаптер, создайте пользовательский адаптер и переопределите метод getView.

+0

Уже сохранено состояние (true или false) каждого флажка в массиве.Но я не знаю, как это сделать, чтобы визуальное состояние каждого окна было сохранено после прокрутки их из экрана. – Moko

+0

Вы сохраняете состояние. Вы используете простой ArrayAdapter для своего списка? Вам придется написать свой собственный адаптер, расширив ArrayAdapter. Вы можете ознакомиться с этим руководством по написанию собственных адаптеров http://www.vogella.com/articles/AndroidListView/article.html#tutorial_ownadapter –

1

Ну, вместо того, чтобы делать это в onItemClick, вам следует рассмотреть возможность сохранения визуального состояния флажков в массив (true/false) и использовать массив в getView адаптера. Рассмотрю это:

// Click check box row #1 => suppose to be hidden => set state hidden of check box #1 in the array = true 

// в GetView

if(checkbox_visual_state_array[data_position] == true){ 
    holder.checkbox.setVisibility(View.GONE); 
}else{ 
    holder.checkbox.setVisibility(View.VISIBLE); 
} 

Надеется, что это помогает.

+0

Да, я уже сохраняю состояния флажков (true, false) в массиве , Тем не менее, я не хочу только скрывать проверенные или непроверенные, я хочу скрыть ВСЕ их так же, как начинается действие, только если выполняются определенные условия. См., Первый случай - это действие с обеих кнопок и всеми флажками видимости. В меню, я могу выбрать, позволяет назвать его вторым случаем, где я буду скрывать обе кнопки и ВСЕ флажки, потому что они мне не нужны. Во втором случае мне нужно только щелкнуть по строке, чтобы отобразить некоторые данные, хранящиеся в этой строке. Надеюсь, я объяснил сам. – Moko

+0

Я ценю помощь кстати, у меня не было больше места в предыдущем комментарии ха-ха. – Moko

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