Actualizaciones de datos de Android ListView ArrayAdapter Mejores prácticas
Tengo una actividad con varias vistas de lista que reciben continuamente nuevos valores forman un hilo de socket, otro hilo analiza los datos y actualiza los adaptadores de matriz, luego el hilo de ui llama a notifyDataSetChanged () para hacer que la lista se actualice.
Mi problema es que estoy refrescando toda la lista un par de veces por segundo, esto hace que la interfaz de usuario sea muy laggy cuando algunas animaciones necesitan suceder.
- ListView de Android con mapas de Google
- cómo filtrar el listview personalizado en android
- Cerrado o circular Horizontal ListView Android
- Resaltar el elemento seleccionado en ListView en Android
- Android: la etiqueta de vista no es correcta en la vista: null (CursorAdapter y DataBinding)
Me preguntaba cuál es la mejor manera de actualizar listas múltiples con múltiples cambios de valor cada segundo?
Gracias, Totem.
- ¿Cómo programar un trabajo pesado para su posterior visualización para listas?
- Cómo detectar si un listview está desplazándose hacia arriba o hacia abajo en android?
- OnItemClickListener consume eventos onClickListener
- Stick Android ListView "categorías" para arriba
- OnItemClickListener y OnClickListener no funcionan para ListView
- Ocultar y mostrar el botón flotante mientras que los rollos de ListView
- Cómo controlar ListView con el patrón MVP para Android
- EditText no recibe eventos clave TAB - stock soft vk
Definitivamente, seguiría las directrices que dieron en Google IO este año.
Video de la lista de reproducción de Google IO
Debería utilizar Cursores (si es necesario) y ListActivity. La interfaz de usuario se actualiza automáticamente tan pronto como hay cambios y en el caso de conjuntos de datos nulos, la lista muestra automáticamente una vista relevante.
Los siguientes ejemplos lo resuelven usando proveedores de contenido:
Main.xml:
<ListView android:id="@id/android:list" android:layout_width="fill_parent" android:layout_height="wrap_content"></ListView> <TextView android:id="@id/android:empty" android:layout_width="fill_parent" android:gravity="center" android:layout_height="wrap_content" android:text="No data, please refresh!" />
Observe el android: lista y android: etiquetas vacías. Estos son requeridos por la actividad de la lista.
En el método onCreate ():
mCursor = getContentResolver().query(SOME_URI, null, null, null, null); ListView mListView = (ListView) findViewById(android.R.id.list); mListView.setAdapter(new CustomCusorAdapter(getApplicationContext(), mCursor));
Puede utilizar un SimpleCursorAdapter si sus vistas son directas. He creado por propio adaptador debido a las vistas complejas:
private class CustomCusorAdapter extends CursorAdapter { public CustomCusorAdapter(Context context, Cursor c) { super(context, c); } @Override public void bindView(View view, Context context, Cursor cursor) { Holder holder = (Holder) view.getTag(); holder.tv.setText(cursor.getString(cursor .getColumnIndex(COL1_NAME))); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View v = getLayoutInflater().inflate( R.layout.layout_xml, null); Holder holder = new Holder(); holder.tv = (TextView) v .findViewById(R.id.tv); holder.cb= (CheckBox) v .findViewById(R.id.cb); v.setTag(holder); return v; } } private class Holder { TextView tv; CheckBox cb; }
Sí, ese video es muy útil. Uno de los más grandes llevar aways es que debe reciclar el convertido pasó a su lista de adaptadores método getView:
public View getView(int position, View convertView, ViewGroup parent){ if (convertView == null) { convertView = mInflator.inflate(resource, parent, false); } //do any view bindings for the row return convertView; }
El otro pedacito útil era utilizar una clase de ViewHolder para el reciclaje de la visión. Está a las 10:30 en el video.
- Cómo anular onPushReceive () de ParsePushBroadcastReceiver?
- Android: especifica la altura y el ancho de ScrollView