Прежде всего, позвольте мне показать вам код, который у меня есть, чтобы сделать то, что говорит название.Как скрыть флажки с 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);
}
Однако, он не работал.
Кроме того, у меня есть другая незначительная проблема. На скриншоте вы можете увидеть активность. Теперь, если я установил флажок, а затем прокрутил вниз, «переместив» флажок за пределами экрана, а затем снова прокручивая этот флажок, флажок будет снят, что означает, что он не сохранил его статус. Как я могу убедиться, что он «запоминает» его статус, когда он находится за пределами экрана?
Извините мой английский и способ объяснить вещи, ха-ха.
Поблагодарили бы за помощь. Заранее спасибо!
Уже сохранено состояние (true или false) каждого флажка в массиве.Но я не знаю, как это сделать, чтобы визуальное состояние каждого окна было сохранено после прокрутки их из экрана. – Moko
Вы сохраняете состояние. Вы используете простой ArrayAdapter для своего списка? Вам придется написать свой собственный адаптер, расширив ArrayAdapter. Вы можете ознакомиться с этим руководством по написанию собственных адаптеров http://www.vogella.com/articles/AndroidListView/article.html#tutorial_ownadapter –