I currently have a list displaying information about what needs to be done.
When the user clicks an item in the list, the application checks which item was clicked and set as completed.
If the item was set as completed, it will display an image with verification; This image is part of a list item.
everything works well. If I scroll, exit the action and open it again, uncheck the box, everything will work fine and will display or hide the image of the corresponding list item.
BUT my problem is this:
I have 2 buttons for sorting list items, in alphabetical order and date order. When I click on them, they work great. BUT, the application does not display the image of elements that have been checked.
I know this because in order to do the checks, I need the listview to fully load. I mean, to show all the information in my activity.
My question is:
How do I know when a list view is populated or loaded so that I can call a method that checks which items have been checked to show the image?
I have isfocused (), onfocuschanged (), onWindowChangeState () and all these types of methods, but none of them work to run my method.
Is there a way to find out when the list is populated so that the check is displayed on the displayed items without any user interaction?
Thanks for your time and help.
PD: I already have a part in which the user views the list, this part will take care.
I use SimpleCursorAdapter to populate the list.
Here I fill in the list:
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); } }); }
This is the method I did to navigate the elements that are visible and see if they were marked or not.
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); } }
this is the method i use to sort the list:
public void ordenarNombre(View v){ ordenadoPor=1; mostrarLista(); }
and well, the layout of the item inside the list:
<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" />