2012-03-23 11 views
24

Estoy trabajando en una aplicación de Android que interactúa con Twitter utilizando su API de búsqueda. Todo funciona bien excepto que cuando quiero mostrar el resultado usando un ListView, solo se muestra el primer resultado.Android - ListView solo muestra el primer resultado

ArrayList<TwitterJSONResults> arrayList = new ArrayList<TwitterJSONResults>(data.getResults().size()); 
for (int i = 0; i < data.getResults().size(); i++) { 
    arrayList.add(data.getResults().get(i)); 
} 

ArrayAdapter<TwitterJSONResults> resultAdapter = new ArrayAdapter<TwitterJSONResults>(
       this, android.R.layout.simple_list_item_1, arrayList); 
listview.setAdapter(resultAdapter); 
resultAdapter.notifyDataSetChanged(); 

El fragmento de código anterior muestran cómo agrego los resultados al adaptador y configurar este adaptador a la la vista de lista, ¿qué estoy haciendo mal?

+0

¿Qué es un LogCat sobre arrayList.size()? – 207

+0

¡Tengo n elementos (alrededor de 15), incluso los imprime todos correctamente! – Rorchackh

+1

Eso probablemente no sea el problema, pero no tiene que llamar a resultAdapter.notifyDataSetChanged(). Mh, bueno ... la lista consta de 15 elementos, pero solo se muestra el primero ... ¿y también el primero se muestra correctamente? ¿Anula toString() en la clase TwitterJSONResults? – 207

Respuesta

93

no ponga ListView en el interior de un ScrollView :)

+0

Ok, ¡pero ahora he perdido el desplazamiento!Mi vista consiste en LinearLayout que incluye un ListView. El ListView mismo se puede desplazar, pero el LinearLayout no puede, por lo que los elementos en el LinearLayout más allá de ListView no se pueden ver, dependiendo del tamaño de la pantalla del usuario. ¡Supongo que nunca se deben incluir elementos después de un ListView dentro de un diseño! – Tom

+5

Si aún está buscando una solución, http://nex-otaku-en.blogspot.com/2010/12/android-put-listview-in-scrollview.html proporciona un método para fijar la altura de ListView entonces mostrará todos los artículos. – dymk

+1

me salvó el día !!! – ramesh

3

Resulta que tenía todo en mi código Java funcionando perfectamente. el problema era que estaba usando la vista de lista dentro de una vista de desplazamiento que generalmente es una mala idea. Llevó a la vista de lista ignorando

android:layout="wrap_content" 

por lo tanto, el contenido estaba allí, simplemente no se mostraba. Después de eliminar la vista de desplazamiento de mi archivo XML, todo funcionó.

Muchas gracias a 207 para el apoyo :)

7

Gracias a @ 207 me di cuenta de que el problema en mi caso fue porque yo estaba usando NestedScrollView, así que para mí se utilizó la solución

android:fillViewport="true" 

Aquí mi código:

<android.support.v4.widget.NestedScrollView 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fillViewport="true" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
    </android.support.v4.widget.NestedScrollView> 
+0

¡Esto me ayudó! – pblead26

2

He tenido este error al poner listview dentro de ScrollView. Y mi solución está siguiendo como:

1. Crear una vista de lista personalizada que es desplazable no

public class NonScrollListView extends ListView { 

public NonScrollListView(Context context) { 
    super(context); 
} 
public NonScrollListView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 
public NonScrollListView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 
@Override 
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
       Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom); 
     ViewGroup.LayoutParams params = getLayoutParams(); 
     params.height = getMeasuredHeight();  
} 

}

2. Uso por encima de clase personalizada para el archivo XML

<xx.xx.NonScrollListView 
     android:id="@+id/lv_nonscroll_list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </xx.xx.NonScrollListView> 

Funcionó bien en todas las versiones de sistema operativo para mí. Espero lo mejor para ti.

Cuestiones relacionadas