7
votes

Android Set View.Gone ne "libère" pas d'espace dans ListView

J'ai une liste de liste avec des éléments pouvant être marqués comme "Terminé". Il y a aussi un toggleboutton qui dit "cacher les articles cachés".

Cependant, lorsque je masque les éléments en réglant la configuration de visibilité (vue.gone), il reste encore de l'espace dans la liste ..

ne devrait pas être si difficile à basculer des éléments de liste dans une liste de liste?


0 commentaires

7 Réponses :


1
votes

Vous devez utiliser l'adaptateur de liste également ...


1 commentaires

Tout cela est sur l'adaptateur de liste.



3
votes

essayez-vous de cacher tout l'élément de la liste? Si oui, je suppose que la vue de la liste ne va pas comme ça parce qu'elle est toujours en train de calculer avec la même quantité d'éléments. Je ne pense pas que cela va simplement l'ignorer parce que c'est parti.

La solution propre consisterait à renvoyer un autre getcount et ignorez simplement les éléments que vous souhaitez masquer. Ou supprimer des éléments de la liste interne utilisée. Appelez notifierdatastetchanged sur l'adaptateur lorsque vous avez modifié la quantité d'éléments de la liste.


4 commentaires

Donc, gardez une liste séparée avec tous et uniquement les éléments vérifiés et fonctionnent avec n'importe quelle liste nécessaires à l'affichage des informations correctes. Elles sonne comme un plan.


Ne fonctionne pas du tout. Je retourne le bon élément et le nombre correct basé sur l'état bascule du bouton. Les éléments de la liste sont les éléments corrects, mais il existe toujours une grande lacune de WhitSpace. Pourrait-il être que les classes de titulaires sont toujours là?


NotifyDataSetSetchanged déclenchera la liste pour appeler greveView pour tous les éléments à l'aide de la valeur renvoyée getcount . Cela devrait faire l'affaire. Mais je ne peux pas vous aider depuis que je ne connais aucun détail. On dirait qu'il y a quelque chose d'autre vraiment faux ...


Cette pièce fonctionne correctement, la hauteur de la liste n'est pas "rafraîchissante" maintient toujours l'espace au-dessus de la liste. Vraiment étrange.



9
votes

Modification de l'androïde: layout_height = "Wrap_Content" à Android: Layout_height = "Fill_Parent" Correction du problème. Tests avec une liste longue .. Avec une liste courte, le même espace était au-dessus de la liste .. une erreur stupide ..

Merci à tous pour l'aide .. Tout fonctionne maintenant.


0 commentaires

0
votes

J'ai pu résoudre ce problème à l'aide de la solution de Knickedi et des commentaires sous elle. Je voulais juste montrer mon adaptateur relativement complet pour clarifier un peu.

J'ai le stockitem de classe avec des champs pour contenir une gamme de données pour un seul stock. Pour l'arrayatadapter personnalisé, le constructeur prend la liste complète des stockitems récupérés à partir d'une table de base de données et toutes les méthodes Ajouter / Supprimer que je peux ajouter à l'avenir fonctionnera également sur cette liste (MLIST). Cependant, je remplace GETView () et getcount () à lire à partir d'une deuxième liste (Mfilteredlist) produite à l'aide de la méthode FiltreList (): P>

@Override
public StockItem getItem(int position) {

    return mFilteredList.get(position);
}


0 commentaires

0
votes

Après avoir vérifié de nombreuses solutions, aucune des solutions n'a été résolue mon problème avec l'espace vide, alors j'ai décidé de trouver ma solution.

J'avais deux problèmes principaux: 1) J'ai eu un espace vide à cause de la vue que je fixais sa visibilité à disparaître 2) J'avais aussi diviseur de 12 dp, même si j'avais le premier problème résolu, j'ai toujours eu la hauteur de diviseur fixe de la solution ListView P>

P>

1.1) J'ai ajouté un booléen à Les données de la liste, pour notifier à l'adaptateur que des éléments sont ignorés p>

1.2) J'ai créé une disposition vide pour simuler un "élément sauté" p> xxx pré> 1.3) J'ai plusieurs types de vues dans ma listeView, élément sélectionné, élément régulier et désormais ignoré p> xxx pré>

seulement si l'élément est ignoré l'adaptateur gonfler à un vide Disposition Comme indiqué à l'étape précédente, j'avais toujours le problème de hauteur de séparateur p>

2) pour fixer la hauteur de séparateur, j'ai changé la hauteur du diviseur sur 0 au lieu de 12DP, Chaque élément qui n'est pas ignoré J'ai ajouté une autre mise en page avec un arrière-plan transparent (la couleur de divier dans mon cas doit être transparente) et ajout de remplissage inférieur de 12DP p>

par exemple l'un de mes articles P>

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:orientation="vertical"
    android:paddingBottom="12dp" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/quick_test_background_selector" >

        <ImageView
            android:id="@+id/advanced_test_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/done_step" />

        <TextView
            android:id="@+id/advanced_test_upper_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="5dp"
            android:layout_toRightOf="@id/advanced_test_image"
            android:gravity="center_vertical"
            android:text="ETAPE 1"
            android:textColor="@android:color/black"
            android:textSize="14sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/advanced_test_lower_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/advanced_test_image"
            android:layout_marginLeft="5dp"
            android:layout_toRightOf="@id/advanced_test_image"
            android:gravity="center_vertical"
            android:text="ETAPE 1"
            android:textColor="@android:color/black"
            android:textSize="14sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/step_without_lower_header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/advanced_test_image"
            android:layout_alignTop="@id/advanced_test_image"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5dp"
            android:layout_toRightOf="@id/advanced_test_image"
            android:gravity="center_vertical"
            android:text="123"
            android:textColor="@android:color/black"
            android:textSize="14sp"
            android:textStyle="bold" />
    </RelativeLayout>

</RelativeLayout>


0 commentaires

0
votes

View.Gone est en train de libérer de l'espace, mais les autres éléments auraient pu être confinés à leurs positions actuelles. Essaye ça. Dans le fichier de mise en page personnalisé (qui agit en tant que vue pour les éléments de la liste),

Supposons si x est l'élément UI que vous voulez être parti, w est l'élément ci-dessous x et y est l'élément ci-dessus x

Dans la disposition personnalisée de votre liste de liste, (en supposant que c'est une disposition relative) fixez le haut de W au bas de X., puis fixez le haut de l'élément X au bas de Y.


0 commentaires

0
votes
convertView = inflater.inflate(R.layout.custom_layout, parent, false);

if (CONDITION) {
    holder.wholeLayout.getLayoutParams().height = 1; // visibility Gone not working && 0 height crash app.
} else {
    holder.wholeLayout.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT;
}

0 commentaires