0

まず、タイトルが示すことを実行するために私が持っているコードをお見せしましょう。

しかし、前に、これはアクティビティがどのように見えるかです:

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;
    }
}

ご覧のとおり、チェック ボックスを非表示にするには、その行をクリックするだけで、View アイテム パラメータと item.getTag() メソッドを取得しますが、onItemClick メソッド以外でこれを行う方法を見つけることができません。私は解決策をグーグルで検索し、これを見つけました:

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);
                    }

しかし、うまくいきませんでした。

また、他の小さな問題があります。スクリーンショットでアクティビティを確認できます。ここで、チェック ボックスをオンにしてから下にスクロールし、チェック ボックスを画面の外に「移動」してから、もう一度そのチェック ボックスまでスクロールすると、チェック ボックスがオフになり、ステータスが保存されませんでした。画面の外に出たら、そのステータスを「覚えている」ことを確認するにはどうすればよいですか?

私の英語と物事を説明する方法を許してください、ハハ。

可能なすべての助けをいただければ幸いです。前もって感謝します!

4

2 に答える 2

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);
}

お役に立てれば。

于 2013-10-25T04:30:36.150 に答える