Désactiver le défilement d'une liste contenue à l'intérieur d'un ScrollView
Je veux afficher un écran de Profil pour mes utilisateurs.
Il doit avoir trois points de vue (2 Buttons
et un ImageView
) et un ListView
pour afficher le contenu fait par l'utilisateur.
Cependant, je ne veux pas le ListView
pour les faire défiler. Au lieu de cela, je veux qu'il soit aussi grand que nécessaire, et de mettre tous mes points de vue à l'intérieur d'un ScrollView
, de sorte que les trois premières vues de défilement avec les ListView
. Bien entendu, cela ne fonctionne pas comme prévu.
Tous mes trois éléments sont à l'intérieur d'un LinearLayout
. J'ai pensé à faire le premier élément dans la ListView
, mais cela conduit à une sélectionnable comme le premier élément, et d'avoir à faire quelques inutiles de codage.
Est-il un moyen de le faire d'une façon ou vais-je avoir à coller avec le fait de faire la Mise en page pour le premier élément de ma ListView?
- vérifiez ceci: stackoverflow.com/questions/4338185/...
- Ouais, mais si j'utilise LinearLayout au lieu de ListView je n'ai pas OnItemSelected de l'événement, ce qui conduit à plus inutiles de codage.
- hi, consultez le lien et de le lire attentivement. utilisation listview dans LinearLayout. ensemble ScrollContainer de faux et Vous pouvez lier un OnClickListener ou OnTouchListener d'un point de vue qui va tirer quand il est cliqué ou touché
- double possible de Désactiver le défilement dans listview
- encore une fois, si vous ne voulez pas utiliser le défilement fournis par ListView, puis ne pas utiliser ListView. Il suffit d'utiliser un ScrollView avec un LinearLayout à l'intérieur. ListView ajoute beaucoup de complexité de votre application backend et il est utile que lorsque vous avez énorme, listes dynamiques.
- Je sais c'est un peu tard. La meilleure solution pour le problème est this.
Vous devez vous connecter pour publier un commentaire.
De les ajouter à la liste comme premier Élément semble être une très bonne solution.
À rendre la Vue ne peut pas être sélectionnée viens d'obtenir le point de vue et
.setClickable(false)
.J'ai trouvé une solution très simple pour cela. Juste obtenir la carte de la listview et calculer sa taille lorsque tous les éléments sont affichés.
L'avantage est que cette solution fonctionne également à l'intérieur d'un ScrollView.
Exemple:
Appeler cette fonction en passant au-dessus de votre ListView objet:
La fonction ci-dessus est un modidication d'un post dans:
Désactiver le défilement dans la listview
Veuillez noter appeler cette fonction après avoir mis la carte à la liste. Si la taille des entrées de la carte a changé, vous devez appeler cette fonction en tant que bien.
Vous pouvez le faire en
pour plus d'informations, veuillez vérifier
Comment obtenir un non défilement ListView?
Je voudrais ajouter un
View
invisibles en arrière-plan sur le dessus deListView
. Définir unView.OnTouchListener()
à elle. Et de consommer de l'événement par le retourtrue
dansonTouch()
méthode deView.OnTouchListener()
.Quand vous voulez la liste de défilement de retour à nouveau, supprimer le contact de l'écouteur de jeu sur la transparence
View
si vous devez afficher nombre limité d'éléments dans la vue liste et que vous voulez arrêter affichage de la liste de défilement, alors vous devez garder listview hauteur de plus de, puis les éléments de hauteur totale.
par exemple, vous voulez montrer à 3 éléments. (la hauteur de la ligne est de 30). alors les éléments de hauteur totale devient
3 x 30dp = 90dp,
alors maintenant, vous devez définir listview hauteur de plus de 90. e.g: 100dp. alors maintenant, votre contrôle listview défile pas, en tout cas.
Je pense que le meilleur moyen serait de mettre les 2 boutons et de l'affichage de l'image dans un LinearLayout (ou de toute disposition qui convient à votre besoin) et ajouter cette disposition que l'entête de la liste à l'aide de la addHeaderView méthode:
http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.vue.Vue)
avec les instructions suivantes:
new_size est une variable qui vous permettra de calculer en fonction du nombre d'éléments de votre liste, par exemple: