2012-02-15 6 views
3

J'ai un GridView qui affiche des éléments, chaque élément est un ListView.ListView dans GridView pas défilement?

le problème est que je ne peux pas faire défiler les éléments ListView, semble comme le GridView est l'obtention de la mise au point ou l'empêcher de les listviews

est-il une solution pour cela?

grâce

**

EDIT:

** voici ma mise en page d'activité

<GridView 
     android:id="@+id/grid" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:verticalSpacing="35dp" 
     android:horizontalSpacing="10dp" 
     android:numColumns="auto_fit" 
     android:columnWidth="300dp" 
     android:stretchMode="columnWidth" 

     /> 
</LinearLayout> 

chaque élément gridview a la disposition suivante:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    > 

    <ListView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/list" 
     /> 

</LinearLayout> 

Répondre

1

Vous ne pouvez pas avoir une vue enfant scrollable dans une vue parent qui est scrollable. Google ne le recommande pas ... et c'est vraiment compliqué. Read this

Il ya eu des gens qui essayaient de faire une solution de contournement (ce qui n'est pas joli), mais je doute que cela fonctionne pour vous. Mais vous pouvez le lire de toute façon et voir si vous pouvez le faire fonctionner pour vous. Enjoy. L'une des principales raisons pour lesquelles cela ne fonctionnera pas est la manière dont les vues défilantes gèrent le toucher. Il existe une méthode appelée dispatchTouchEvent() et onInterceptTouchEvent() qui décide d'intercepter l'événement tactile ou de le transmettre à ses enfants. Pour les vues défilantes, elles interceptent toujours les mouvements de "balayage". Donc, ça ne va jamais aller à vos enfants.

Vous pouvez essayer de le modifier, mais si vous y réfléchissez, comment saurez-vous si vous essayez de faire défiler le parent ou si vous essayez de faire défiler l'enfant? Imaginez si l'un de vos enfants défilant finit par prendre la largeur de votre écran, mais que vous voulez ensuite faire défiler vos parents, comment allez-vous gérer cela?

Résumé: ce n'est pas recommandé .... si vous insistez vraiment ... alors allez-y et écrivez votre propre vue personnalisée pour gérer la logique. Mais je vous garantis qu'il ne sera pas joli et ne fonctionnera presque jamais pour tous les cas d'utilisation.

+0

J'ai fini par implémenter ma propre vue personnalisée –

2

attribut Entité android:scrollingCache="true" dans votre ListView

<ListView android:id="@+id/android:list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:scrollingCache="true" 
    android:layout_weight="1" /> 
+0

Désolé, ça n'a pas –

+0

hmmm .... essayez 'listView.setOverScrollMode (View.OVER_SCROLL_ALWAYS)' –

+0

ne fonctionne pas non plus, je crois qu'il a quelque chose à voir avec problème de focusability –