web-dev-qa-db-fra.com

Android - ListView n'affiche que le premier résultat

Je travaille sur une application Android qui interagit avec Twitter à l'aide de leur API de recherche . Tout fonctionne bien, sauf que lorsque je veux afficher le résultat à l'aide d'un ListView, seul le premier résultat est affiché. 

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();

L'extrait de code ci-dessus montre comment ajouter les résultats à l'adaptateur et comment définir cet adaptateur sur la liste, Qu'est-ce que je fais de mal?

25
Rorchackh

Ne mettez pas ListView dans un ScrollView :)

102
207

Ce n'est pas une réponse. Vous pouvez utiliser ListView dans ScrollView. Lisez ceci: http://kennethflynn.wordpress.com/2012/09/12/putting-Android-listviews-in-scrollviews/

36
iProgrammer

Grâce à @ 207, j'ai compris que le problème dans mon cas était dû au fait que j'utilisais/ NestedScrollView , la solution a donc été utilisée pour moi. 

Android:fillViewport="true"

Voici mon code:

    <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>
8
Jorge Casariego

Il s'avère que tout mon code Java fonctionnait parfaitement. le problème était qu’il utilisait listview inside un scrollview, ce qui est généralement une mauvaise idée. Cela a conduit à listview en ignorant

Android:layout="wrap_content"

donc le contenu était là, il ne montrait tout simplement pas. Après avoir supprimé le scrollview de mon fichier XML, tout a fonctionné.

Merci à 207 pour le support :)

3
Rorchackh

J'ai eu cette erreur comme vous quand mis listview à l'intérieur de ScrollView. Et ma solution est la suivante: 

1. Créer une liste personnalisée qui ne peut pas défiler  

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. Utiliser la classe personnalisée ci-dessus pour un fichier xml

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

Cela a bien fonctionné sur toutes les versions d'OS pour moi… __. J'espère le meilleur pour vous.

3
Hai Rom

Mettez-le dans la présentation ListView xml

    Android:stackFromBottom="true"
    Android:transcriptMode="alwaysScroll"
0
Phuc Nguyen

Vous pouvez utiliser un ListView dans un fichier NestedScrollView . La seule chose à retenir est d’ajouter Android:nestedScrollingEnabled="true" dans la présentation XML afin d’activer le défilement des enfants de NestedScrollView.

0
crilly