Masquer la ligne de liste sans prendre l'espace
J'ai une ListView avec un associé ArrayAdapter qui affiche son contenu dans plusieurs activités. Malheureusement, il a obtenu nécessaires maintenant, que mon ListView dans l'un des paramètres ne s'affichent pas tous ses éléments, mais seulement ceux où la "propriété" n'est pas le cas. Je voudrais éviter d'utiliser deux ArrayAdapters avec un contenu différent, depuis lors, j'ai en quelque sorte besoin de les garder synchronisés. J'ai essayé comme ceci (cette méthode est maintenant juste suppose que getView est appelée dans le contexte où nous voulons cacher certains éléments):
public View getView(int position, View convertView, Context context) {
....
if(!arrayitems[position].isProperty()) { //arrayitems is the underlying array
convertView.setVisibility(View.VISIBLE);
}
else {
convertView.setVisibility(View.GONE);
}
return convertView;
}
Cela fonctionne, mais j'ai un blanc de ligne si l'élément a isProperty == true. Je voudrais faire la ligne invisible dans le sens, qu'elle ne prend pas plus d'espace. Est-ce possible?
Le fichier xml utilisé pour convertView ressemble à ceci:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/text_item_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:maxLines="1"
android:ellipsize="none"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:id="@+id/text_item_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textStyle="bold" />
</LinearLayout>
<TextView android:id="@+id/text_item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp"
android:maxLines="3"
android:ellipsize="none" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/text_item_rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:textSize="10sp" />
<TextView
android:id="@+id/text_item_voted"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10sp" />
</LinearLayout>
</LinearLayout>
J'ai essayé de relire tous les android:layout_height="wrap_content" avec "fill_parent" mais ça ne changeait rien...
Merci!
désolé, isProperty() est une méthode d'éléments dans le tableau
si encore problème, veuillez vérifier ma réponse, il va travailler pour vous.
OriginalL'auteur user1809923 | 2012-11-30
Vous devez vous connecter pour publier un commentaire.
Définir la Visibilité de tout le contenu de la vue de liste de PARTI et puis définissez la visibilité de la Vue à Disparu.... cela permet de masquer la ligne sans occupation de l'espace..... il a travaillé pour moi même, j'ai été à la recherche pour cela, mais après une recherche j'ai trouvé ceci....
EDIT 1 :
La définition de la visibilité de la Vue à DISPARU, c'est assez. Pas besoin de mettre l'enfant de l'élément de visibilité.
OriginalL'auteur Gowtham Raj
Je vais avoir le même problème que vous avez
J'ai pensé à elle par
inflating another layout layout with no height and width
Adapter.java
Et blanc mise en page sera comme ceci,
blank_layout.xml
OriginalL'auteur Jaydipsinh Zala
Donc, ce que Romain voulait dire, c'était pour ajouter un id à votre LinearLayout
Puis dans votre Java vous ne
Vous devrez peut-être changer un peu si votre gonflant de votre point de vue différemment. Je l'ai fait moi-même et il fonctionne vraiment bien.
View.GONE
j'avais un tas d'espace vide à la fin de la liste que l'utilisateur peut faire défiler. Pour le fixer, j'ai mis à jourgetCount()
à exclure les lignes masquées à partir du nombre total. Un beaucoup plus propre mise en œuvre aurait été de garder deux arraylists: l'un pour les données d'origine, et un autre pour la carte qui exclut les données des lignes masquées.Je l'ai fait avant et ce que je n'aime pas, c'est que votre bébé assis de données supplémentaires.
ouais je suis d'accord - c'est pourquoi je n'ai pas aller dans cette voie pour ce cas particulier 🙂 j'ai oublié de mentionner dans mon commentaire ci-dessus: une fois
getCount()
renvoie une valeur qui exclut les lignes de données que vous souhaitez masquer, vous devez localiser les données cachées lignes à la fin du tableau qui est utilisé par votre carte.OriginalL'auteur MinceMan
Vous pouvez utiliser le getview mise en page de android:layout_height="wrap_content" et de faire usage de la Visibilité allé à cacher votre disposition
OriginalL'auteur kumar_android
Un autre utilisateur avait le même problème et il a résolu de cette façon: https://stackoverflow.com/a/7928923/1548679 .
J'espère que cela pourra vous aider.
Accueille
OriginalL'auteur sascha10000
En modifiant getCount() et aussi de la position dans getView() avec votre logique, vous pouvez le faire fonctionner pour des exemples de Vérifier http://www.sherif.mobi/2012/01/listview-with-ability-to-hide-rows.html par @sherif-elkhatib
OriginalL'auteur Harish