¿Por qué mi ListView no muestra nada?

Tengo un ListView muy básico en androide y había fijado un adaptador muy básico. Mi problema es que la vista de lista no muestra nada, sin importar el adaptador y el notifyDataSetChanged ();

Aquí está mi código: XML:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="@string/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" ></TextView> <ListView android:id="@+id/selectView" android:layout_height="wrap_content" android:layout_width="wrap_content"> </ListView> </RelativeLayout> 

El código de actividad:

 import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import com.androidcourse.phonemapper.R; import com.androidcourse.phonemapper.model.SelectViewAdapter; public class SelectActivity extends Activity { private ListView mListView; private SelectViewAdapter mAdapter; @Override public void onCreate(Bundle savedState) { super.onCreate(savedState); setContentView(R.layout.select_activity); initializeListView(); } private void initializeListView() { mListView = (ListView) findViewById(R.id.selectView); mAdapter = new SelectViewAdapter(this); mListView.setAdapter(mAdapter); mAdapter.notifyDataSetChanged(); } @Override public void onResume() { super.onResume(); } } 

Y el código del adaptador:

 import android.content.Context; import android.graphics.Color; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class SelectViewAdapter extends BaseAdapter { private Context mContext; private TextView mMockTextView; public SelectViewAdapter(Context cnt) { mContext = cnt; mMockTextView = new TextView(mContext); mMockTextView.setText("Test text"); mMockTextView.setBackgroundColor(Color.CYAN); } @Override public int getCount() { return 3; } @Override public Object getItem(int position) { return mMockTextView; } @Override public long getItemId(int position) { return 3; } @Override public View getView(int position, View convertView, ViewGroup parent) { return mMockTextView; } } 

El problema es que no se muestra nada en la pantalla. Una pantalla negra (y la primera vista de texto desde el XML) es todo lo que consigo. No puedo ver el mockTextView y su texto. Al parecer estoy haciendo algo muy mal, pero no puedo entender qué.

Puedo pensar en algunas cosas.

En primer lugar, su RelativeLayout no tiene información relativa de posicionamiento. Asumiría que usted significó poner esto en un LinearLayout con la orientación fijada a vertical de lo que usted describe. Mi conjetura es que la lista no se está dibujando realmente puesto que no es anclada incluso a nada en el actual RelativeLayout. Si te quedas con el RelativeLayout, asegúrate de poner un id en el nombre de la aplicación TextView y colocar el ListView debajo de él a través de layout_below.

Solución LinearLayout

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="@string/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" ></TextView> <ListView android:id="@+id/selectView" android:layout_height="wrap_content" android:layout_width="wrap_content"> </ListView> </LinearLayout> 

Solución RelativeLayout:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/app_name_text" android:text="@string/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" ></TextView> <ListView android:id="@+id/selectView" android:layout_below="@id/app_name_text" android:layout_height="wrap_content" android:layout_width="wrap_content"> </ListView> </RelativeLayout> 

A continuación, getView () devuelve el mismo textView para los 3 índices. No es un problema para mostrar la misma vista sobre varios índices sin embargo, con un tamaño de lista de tres, estoy apostando que la pantalla puede mostrar los tres al mismo tiempo. Y puesto que una visión no puede estar en más de una posición a la vez, en realidad esperaría que esto fallara así que dudo que esté incluso consiguiendo a este código todavía. Intente crear un nuevo TextView para cada getView (). Además, su MockTextView no tiene parámetros de diseño propios. Por lo tanto, colocarlo dentro de una célula listView podría no estar ocurriendo. Así que puede darle params de tipo AbsListView.LayoutParams (WRAP_CONTENT, WRAP_CONTENT). Nuevamente, aunque esperaría que esto fuera un error si llegara al código original.

GetView () ordenar:

  @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null) { TextView textView = new TextView(parent.getContext()); textView.setText("Position is:"+position); textView.setBackgroundColor(Color.CYAN); textView.setLayoutParams(new AbsListView.LayoutParams(WRAP_CONTENT, WRAP_CONTENT); convertView = textView; } return mMockTextView; } 

Y por último, la altura wrap_content de su lista a veces puede ser problemática. No soy consciente de todos los escenarios. Si terminas cambiando a un LinearLayout, intenta establecer el layout_height de la vista de lista en 0 y luego establecer el layout_weight = 1. Esto obliga al diseño lineal a inflarlo en más espacio.

LinearLayout Peso Solución:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="@string/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" ></TextView> <ListView android:id="@+id/selectView" android:layout_weight="1" android:layout_height="0dp" android:layout_width="wrap_content"> </ListView> </LinearLayout> 

Yo estaba usando el ejemplo de enlace de datos del libro Hola Android de Ed Burnette (gran libro).

Cambié la disposición del artículo de A RelativeLayout a LinearLayout; Sin embargo, no agregué una orientación cuando hice el cambio.

Una vez que agregué android: orientation = "vertical" todo funcionó bien.

Dos horas de mi vida en esta.

Si bien no responde a esta pregunta, un problema típico es inflar como un recurso de adaptador un diseño basado en un Parent LinearLayout con height = wrap_content y cada elemento LinearLayout con height = fill_parent.

Como en

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/parentLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/someText" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1"/> 

Mientras se muestra bien en Eclipse, cada fila termina con height = 0. Esto se puede arreglar estableciendo height = wrap_content para uno de los elementos secundarios

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/parentLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/someText" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> 
  • Aplicación de contacto como scrollinglist en android
  • Elemento de lista con CheckBox no se puede hacer clic
  • No se puede implantar OnItemClickListener en android-swipelistview
  • Android ListView setSelection () no parece funcionar
  • Cómo configurar Listener En el texto Editar de la vista de lista personalizada en android
  • Diseño relativo verificable como elemento en la lista de selección múltiple
  • Enumerar actividad con encabezado, pie de página y vacía todo visible
  • Android ListView Ir a la posición del cursor
  • Realizar una llamada desde ListView (OnitemClick)
  • Android deshabilitar los elementos de vista de lista
  • Limitar el número de filas de listview
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.