Cuando se cambian los datos asociados con el adaptador de matriz, ¿invalidar la vista de lista es suficiente para mostrar los valores actualizados? El siguiente fragmento de código no funciona, ¿entendí mal algo aquí?
public class ZeroItemListActivity extends Activity {
private ArrayList<String> listItems=new ArrayList<String>();
private ListView mMyListView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mMyListView=(ListView) findViewById(R.id.MyListView);
mMyListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,listItems));
}
public void addItem(View v){
listItems.add("list Item");
mMyListView.invalidate();
}
}
Diseño utilizado:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello" />
<ListView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/MyListView"></ListView>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/AddItemsButton"
android:text="Add Items" android:onClick="addItem"></Button>
</LinearLayout>
BaseAdapter
aYourCustomAdapter
Cambie esta línea:
a:
y después de actualizar el valor de un elemento de la lista, llame a:
fuente
invalidate();
llama a la vista de lista para invalidarse a sí misma (es decir, color de fondo)invalidateViews();
llama a todos sus hijos a invalidar. permitiéndole actualizar las vistas de los niñosSupongo que es una especie de eficiencia que evita que todos los elementos tengan que volver a dibujarse constantemente si no es necesario.
fuente
Encontré una solución que es más eficiente que la respuesta aceptada actualmente, porque la respuesta actual obliga a actualizar todos los elementos de la lista. Mi solución actualizará solo un elemento (que se tocó) llamando a los adaptadores getView y reciclando la vista actual, lo que agrega aún más eficiencia.
fuente