ListView no se llena, getView () no se recibe
Estoy teniendo algunos problemas para que mi listview aparezca en una simple aplicación que estoy escribiendo. Por alguna razón, el método getView()
de mi clase de adaptador no se llama. Sin embargo, cuando getCount()
se llama en mi clase de adaptador no está devolviendo 0, pero de hecho está devolviendo el valor adecuado. Estoy realmente confundido en cuanto a por qué esto no está funcionando.
Aquí está mi Actividad:
- ListView con añadir y eliminar botones en cada fila en android
- Agregar elementos a ListView, mantener la posición de desplazamiento y NO ver un salto de desplazamiento
- Android - PullToRefresh ListView siempre vacío
- ListView elemento de animación de desplazamiento ("UIKit Dynamics" -como)
- El mejor método para agregar continuamente nuevos datos a listview
import android.app.Activity; import android.os.Bundle; import android.widget.ListView; public class CardListActivity extends Activity { protected ListView lv; protected int nCards = 12; protected String[] cardList = new String[nCards]; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.cardlist); this.loadCardStrings(); lv = (ListView) findViewById(R.id.CardList_ListView); EditorListAdapter adapter = new EditorListAdapter(this, this.cardList); lv.setAdapter(adapter); } protected void loadCardStrings(){ cardList = getResources().getStringArray(R.array.card_list); Util.logD("Created the string arrays with:" + Integer.toString(cardList.length) + " items."); } public void onStart(){ super.onStart(); } public void onResume(){ super.onResume(); } public void onPause(){ super.onPause(); } public void onStop(){ super.onStop(); } public void onDestroy(){ super.onDestroy(); } }
Aquí está el diseño utilizado por la actividad:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/CardList_LinearLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Hello"/> <ListView android:id="@+id/CardList_ListView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
Finalmente, aquí está mi clase de adaptador:
import android.app.Activity; import android.graphics.Color; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class EditorListAdapter extends BaseAdapter { Activity context; String names[]; public EditorListAdapter(Activity context, String[] title) { super(); this.context = context; this.names = title; } public int getCount() { Util.logD("EditorListAdapter.getCount() ret:" + Integer.toString(names.length)); return names.length; } public Object getItem(int position) { Util.logD("EditorListAdapter.getItem()"); return null; } public long getItemId(int position) { Util.logD("EditorListAdapter.getItemId()"); return 0; } public View getView(int position, View convertView, ViewGroup parent) { TextView t; if (convertView == null) t = new TextView(parent.getContext()); else t = (TextView) convertView; t.setText(this.names[position]); convertView = t; Util.logD("EditorListAdapter.getView() + " + t.getText().toString()); return convertView; } // Added per K-Ballo suggestion public int getViewTypeCount(){ return 1; } public int getItemViewType(){ return 0; } }
- EditText de Focusable en ListView y onItemClick
- Efecto de botón de diapositiva en el elemento de vista de lista para Android
- Usando simpleCursorAdapter
- Mostrar la barra inferior de botones en ListView mientras se desplaza hacia arriba y se oculta cuando se desplaza hacia abajo
- Android Descargar varios archivos y mostrar el progreso en ListView
- Fuerza onSizeChanged para ListView
- El adaptador personalizado de Android no funciona correctamente para la lista de chat
- Aplicar estilo a Android ListView
Intente cambiar el android:layout_height="fill_parent"
para el textview a wrap_content
en wrap_content
lugar. Creo que el listview nunca se muestra, por lo que nunca es necesario llamar a getView ()
Sé que ya hay una respuesta a esta pregunta.
Sin embargo, estoy teniendo una causa raíz diferente y la razón con síntomas similares a la pregunta original (getView () no se llama), por lo tanto creo que es beneficioso para documentar aquí para otras personas que tienen diferentes causas.
Según lo dado por http://hissain.in/wordpress/?p=659
"A veces parece que notifyDataSetChanged () no funcionará para usted (y por lo tanto getView () no se llamará). La razón podría ser su adaptador pierde referencia a su lista . Cuando inicializa el adaptador, toma una referencia de la lista de array y pasa a su superclase. Pero si reinicializa su lista de array existente pierde la referencia, por lo tanto, el canal de comunicación con el adaptador "
Por lo tanto, nunca reinicialice su lista, sino que utilice clear () en la lista.
list.clear(); // Right Thing to Do list = new List<T>(); // Wrong Thing to Do, will lose reference in the adapter