現在、やらなければならないことの情報を表示するリスト ビューがあります。
ユーザーがリストビューの項目をクリックすると、アプリはクリックされた項目を確認し、完了として設定します。
アイテムが完了として設定されている場合、チェック付きのイメージ ビューが表示されます。このイメージビューは、リストビューのアイテムの一部です。
すべてがうまくいっています。スクロールしてアクティビティを終了して再度開くと、アイテムのチェックを外すと、すべてが正常に機能し、対応するリストビューアイテムのイメージビューを表示または非表示にします。
しかし、私の問題はこれです:
リスト ビューの項目をアルファベット順と日付順に並べ替えるための 2 つのボタンがあります。それらをクリックすると、うまく機能します。しかし、アプリはチェックされたアイテムのイメージビューを表示しません。
これは、チェックを表示するには、リストビューを完全にロードする必要があるためです。つまり、すべての情報をアクティビティに表示します。
私の質問は:
どのアイテムがチェックされて画像ビューを表示するかを確認するメソッドを呼び出すことができるように、リスト ビューの作成または読み込みがいつ完了したかを知るにはどうすればよいですか?
isfocused()、onfocuschanged()、onWindowChangeState()、およびこれらすべてのタイプのメソッドを使用しましたが、いずれもメソッドをトリガーするために機能しません。
ユーザーの操作なしで、表示されているアイテムにチェックを表示するためにリストビューがいつ読み込まれるかを知る方法はありますか?
お時間をいただきありがとうございます。
PD: ユーザーがリストをスクロールする部分は既にありますが、その部分は処理されます。
リストビューを埋めるために SimpleCursorAdapter を使用しています。
これは、リスト ビューを埋める場所です。
public void mostrarLista(){
Cursor c = admin.obtenerCursorGastosFijos(ordenadoPor);
// The desired columns to be bound
String[] columnas = new String[] {"_id", "Descripcion", "Costo_Estimado", "Fecha_Pago"};
// the XML defined views which the data will be bound to
int[] views = new int[] {R.id.IdGstFijo, R.id.DescGstFijo, R.id.CostoGstFijo, R.id.FechaGstFijo };
// create the adapter using the cursor pointing to the desired data
//as well as the layout information
dataAdapter = new SimpleCursorAdapter(this, R.layout.lista_gastos_fijos, c, columnas, views, 0);
listaGastos = (ListView) findViewById(R.id.listaGastosFijos1);
// Assign adapter to ListView
listaGastos.setAdapter(dataAdapter);
listaGastos.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> Listview, View v,
int position, long id) {
// TODO Auto-generated method stub
Cursor cursor = (Cursor) Listview.getItemAtPosition(position);
String idGst=cursor.getString(cursor.getColumnIndexOrThrow("_id"));
dialogoOpcionesGst(Integer.parseInt(idGst), v).show();
return true;
}
});
listaGastos.setOnScrollListener(new OnScrollListener(){
@Override
public void onScroll(AbsListView arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onScrollStateChanged(AbsListView arg0, int arg1) {
// TODO Auto-generated method stub
mostrarItemsPagados(listaGastos);
}
});
}
これは、表示されているアイテムをナビゲートし、それらがチェックされているかどうかを確認するために私が行った方法です
public void mostrarItemsPagados(ListView lista){
for (int i = 0; i <= lista.getLastVisiblePosition() - lista.getFirstVisiblePosition(); i++){
View item = (View)lista.getChildAt(i);
ImageView img = (ImageView)item.findViewById(R.id.imgPagado);
if(admin.existeGstFijoReal(Integer.parseInt(((TextView)item.findViewById(R.id.IdGstFijo)).getText().toString()))){
img.setImageResource(R.drawable.img_check);
}
else
img.setImageDrawable(null);
}
}
これは、リストをソートするために使用する方法です。
public void ordenarNombre(View v){
ordenadoPor=1;
mostrarLista();
}
さて、リスト内のアイテムのレイアウトは次のとおりです。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<TextView
android:id="@+id/IdGstFijo"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="2"
android:visibility="gone"
android:gravity="center"
android:lines="4" />
<TextView
android:id="@+id/DescGstFijo"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="2"
android:gravity="center"
android:lines="4" />
<TextView
android:id="@+id/CostoGstFijo"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="2"
android:gravity="center"
android:lines="4"/>
<TextView
android:id="@+id/FechaGstFijo"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="2"
android:gravity="center"
android:lines="4" />
<ImageView
android:id="@+id/imgPagado"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
/>