Listview con CursorAdapter
Estoy desarrollando una aplicación que muestra los contactos del teléfono con CursorAdapter. Cuando lo ejecuto, me enfrenté con una vista de lista que repitió sólo un contacto como abajo ("david" es uno de mis contactos, sólo se repite en listview)
David 017224860
- Android: ListView, ArrayAdapter y matriz 2-d
- Cómo controlar páginas de páginas de vista desde otra página
- Android: ¿Cuál es el valor predeterminado de android: dividerHeight para una vista de lista
- Cómo cambiar el color de Android ListView separador de línea?
- Cómo utilizar ListFragment en Android Swipe Tabs?
David 017224860
David 017224860
David 017224860
David 017224860
David 017224860.
.
.
.
Mi actividad parece
public class Contacts extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.contacts); Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,null, null); startManagingCursor(cursor); ContactCursorAdapterCT adapter= new ContactCursorAdapterCT(Contacts.this, cursor); ListView contactLV = (ListView) findViewById(R.id.listviewblcontactsDB); contactLV.setAdapter(adapter);
Y mi cursorAdapter se parece a:
public class ContactCursorAdapterCT extends CursorAdapter { public ContactCursorAdapterCT(Context context, Cursor c) { super(context, c); // TODO Auto-generated constructor stub } @Override public void bindView(View view, Context context, Cursor cursor) { while (cursor.moveToNext()) { TextView name = (TextView)view.findViewById(R.id.blacklistDB1); name.setText(cursor.getString(cursor.getColumnIndex (ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))); TextView phone = (TextView)view.findViewById(R.id.blacklistDB2); phone.setText(cursor.getString(cursor.getColumnIndex (ContactsContract.CommonDataKinds.Phone.NUMBER))); } } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { // TODO Auto-generated method stub LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(R.layout.lv, parent, false); bindView(v, context, cursor); return v; }
- Comprensión de Android ListView
- BaseAdapter: set hasStableIds () a false?
- Vista de lista de fondo de pie de página en Android 2.3.3
- No se actualiza la vista de lista de Android
- ¿Cómo puedo implementar una Lista de Expandir / Contraer el Material de Diseño en Android?
- Los elementos listView desaparecen en desplazamiento para android 2.3
- Mantener el elemento inferior de ListView visible cuando aparece el teclado
- Deshabilitar el desplazamiento de ListView al pasar ViewPager
Noté algunos puntos:
- Un CursorAdapter mueve el Cursor para usted, saque su llamada a
cursor.moveToNext()
. - El adaptador
getView()
llama anewView()
ybindView()
por sí mismo; Usted no debe llamar a estos métodos usted mismo. - Debe ver las conferencias del desarrollador de Android en Google IO para aprender consejos y trucos sobre cómo acelerar su adaptador. Consejos como:
- Utilizar un ViewHolder, en lugar de llamar a
findViewById()
repetidamente. - Guardando los índices de su Cursor, en lugar de llamar a
getColumnIndex()
repetidamente. - Recuperar LayoutInflater una vez y mantener una referencia local.
- Utilizar un ViewHolder, en lugar de llamar a
También, sugiero que cambies de usar CursorManager a usar CursorLoader. Esto se documenta en la guía de la API de Android, bajo Cargadores. Un ejemplo específico que puede ser útil es aquí .
Un Adaptador de Cursor "conecta" un Cursor a un ListView. El Cursor es una vista de datos de los datos, y el ListView es una vista de interfaz de usuario de los mismos datos. No es necesario programar nada para que el ListView permanezca sincronizado con el Cursor, eso es todo manejado automáticamente.
Debe indicarle a ListView qué columnas debe mostrar el cursor, consulte la documentación de la clase SimpleCursorAdapter . Normalmente uso esa clase a menos que tenga que modificar los datos a medida que los muevo desde el Cursor al ListView.
- SQLiteException: tabla ya existe
- Android: tomar fotos y guardarlas con un nombre personalizado en un destino personalizado mediante Intent