web-dev-qa-db-fra.com

Android: définir une vue vide en vue liste

 <TextView
            Android:id="@Android:id/empty"
            style="@style/FacebookFont"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:gravity="center_horizontal"
            Android:text="@string/no_result_found"
            Android:textColor="@color/white" />

c'est le code xml pour une vue vide. Je mets la vue vide comme suit:

    list.setAdapter(adapter);
    list.setEmptyView(findViewById(Android.R.id.empty));

J'ai les éléments dans la liste même alors qu'avant que la liste ne soit remplie, la vue vide est affichée. Je ne veux pas que cette vue vide soit affichée lorsque listview contient un élément.

S'il vous plaît aider.

16
user2159624

si vous utilisez ListActivity, inutile de définir manuellement la vue vide. Supprimez list.setEmptyView(findViewById(Android.R.id.empty)); de votre code.

Modifiez votre mise en page comme ci-dessous, puis ajoutez EmptyView automatiquement si la liste ne contient aucun élément:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:orientation="vertical"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:paddingLeft="8dp"
        Android:paddingRight="8dp">

    <ListView Android:id="@Android:id/list"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:background="#00FF00"
            Android:layout_weight="1"
            Android:drawSelectorOnTop="false"/>

     <TextView Android:id="@Android:id/empty"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:background="#FF0000"
            Android:text="No data"/>

</LinearLayout>
14

Vous devez définir la vue vide avant de configurer l'adaptateur, si votre MainActivity n'étend pas ListActivity.

Essaye ça

list.setEmptyView(findViewById(Android.R.id.empty));
list.setAdapter(adapter);

Désolé pour la réponse tardive!

Autre méthode: Étendez votre activité à partir de ListActivity. Et ajoutez une textview à votre présentation de liste avec l'ID Android.R.id.empty

11
VenoM

Essaye ça 

    View view = getLayoutInflater() .inflate(<resource id of the empty view>, null);
    ViewGroup viewGroup= ( ViewGroup)list.getParent();
    viewGroup.addView(view);
    list.setEmptyView(view); 
    list.setAdapter(adapter);
5
Chris

Il y a des réponses correctes, cependant, je pense que c'est la meilleure approche que j'ai trouvée:

View emptyView = getLayoutInflater().inflate(R.layout.empty_list_cart, null);
addContentView(emptyView, listView.getLayoutParams()); // You're using the same params as listView
listView.setEmptyView(emptyView);
listView.setAdapter(adapter);
5
cesards

Tout ce que @dhawalSodhaParmar a expliqué est correct. Mais il y a une confusion lorsque vous regardez la façon dont la réponse est posée.

    <?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context=".SampleActivity">

    <ListView
        Android:id="@+id/list"
        Android:orientation="vertical"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:paddingBottom="@dimen/activity_vertical_margin"
        Android:paddingLeft="@dimen/activity_horizontal_margin"
        Android:paddingRight="@dimen/activity_horizontal_margin"
        Android:paddingTop="@dimen/activity_vertical_margin"
        Android:divider="@null"
        Android:dividerHeight="0dp" />

    <!-- Empty view is only visible when the list has no items. -->
    <TextView
        Android:id="@+id/empty_text_view"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerInParent="true"
        Android:text="NO DOCUMENTS AVAILABLE!"
        Android:textColor="#525252"
        Android:textAppearance="?android:textAppearanceMedium"
        Android:visibility="gone"/>

</RelativeLayout>

Supposons que si vous avez déjà une vue en liste et un adaptateur sauvegardant la même chose avec des données. Et en supposant que tout fonctionne correctement, quiconque souhaite implémenter cet écran de liste vide doit démarrer comme suit: Vous pouvez utiliser une disposition linéaire ou une disposition relative, mais de préférence Relative en raison de la flexibilité. Et un textView comme je l'ai écrit.

Étape 2: Accédez à votre fichier Java d’activité et après votre setContentView

ListView emptyListView = (ListView) findViewById(R.id.list);
// set your adapter here
// set your click listener here
// or whatever else
emptyListView.setEmptyView(findViewById(R.id.empty_text_view));

Ça y est, maintenant courez et vous êtes prêt!

0
Arjun Kalidas