Android ListView Adaptateur comment détecter une liste vide?
J'ai une ListView dans mon Activité qui prend des valeurs à partir d'une extension de la classe de SimpleAdapter.
Celui-ci est correctement quand je ajouter ou supprimer certaines des données qu'il contient.
Mais mon problème c'est que quand mon élément de la liste est vide, je voudrais remplacer la liste par un message du genre "Aucun élément n'existent" ou quelque chose comme ça.
J'ai essayé de le faire, de cette façon:
class FavAdapter extends SimpleAdapter{
Activity context;
ArrayList<HashMap<String,String>> data;
String[] items;
int[] champs;
int layout;
FavAdapter(Activity _context, ArrayList<HashMap<String,String>> _data, int _layout, String[] _items, int[] _champs){
super(_context, _data, _layout, _items, _champs );
this.data = _data;
this.context = _context;
this.items = _items;
this.layout = _layout;
this.champs = _champs;
}
public View getView(int pos, View convertView, ViewGroup parent){
//Recycling
View row = convertView;
//Else get from XML
if(row == null){
LayoutInflater infla = context.getLayoutInflater();
row = infla.inflate(layout, null);
}
//If there are data
if(data.size() > 0){
/**** Here I am correctly constructing row *****/
...
}
//Else
else{
TextView txt = new TextView(ActivityFavoris.this);
txt.setText("Not data inhere");
LinearLayout ll = (LinearLayout) row.findViewById(R.id.result_lyt_principal);
ll.addView(txt);
}
return row;
}
Problème, c'est que ma liste n'a jamais une taille de 0. en fait, quand les données est vide, la carte n'est pas appelé.
Quelqu'un peut-il m'expliquer comment je peux le faire par un autre moyen?
Merci à l'avance.
Edit : à l'Aide de vos réponses, je réussir sur que. Ma solution est : setContentView doit être utilisé avec findViewById(android.R.id.vide), mais si comme moi vous avez deux listView dans votre activité, qui ont besoin de différentes vide vues, vous la trouverez à l'intérieur de mise en page différente. De cette façon, android appeler automatiquement la vue de droite lorsque la liste est vide, et ne rien avoir à faire dans l'adaptateur lorsque les données.la taille est de 0.
exemple: en Activité :
public void onCreate(Bundle b){
super.onCreate(b);
lv1 = (ListView) findViewById(R.id.listviewone);
lv2 = (ListView) findViewById(R.id.listviewtwo);
//****set listview adater***//
...
//set empty view
lv1.setEmptyView(findViewById(R.id.layoutone).findViewById(android.R.id.empty));
lv2.setEmptyView(findViewById(R.id.layouttwo).findViewById(android.R.id.empty));
}
avec xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:id="@+id/layoutone"
android:orientation="horizontal"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ListView
android:id="@+id/listviewone"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<TextView
android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Pas de favoris enregistrées" />
</LinearLayout>
<LinearLayout
android:id="@+id/layouttwo"
android:orientation="horizontal"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ListView
android:id="@+id/listviewtwo"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<TextView
android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Pas de favoris enregistrées" />
</LinearLayout>
Vous devez vous connecter pour publier un commentaire.
Utiliser la méthode setEmptyView qui définit la vue afin de voir si la carte est vide.
La réponse ci-dessus sonne bien, mais pour l'enregistrement, la raison que votre méthode ne semble pas être appelé est probablement parce que votre mise en œuvre de getCount() renvoie quelque chose comme données.size() - sens 0. Cela signifie que la liste ne sera jamais appel getView à tous.
Au lieu de cela, vous pourriez faire quelque chose comme ceci:
J'espère que c'est utile.
Vous appelez cette carte dans une certaine activité. il y a l'adaptateur est réglé à une listview. Avant de fixer la carte à la liste d'affichage vous pouvez vérifier quelle est la taille de la liste de tableaux. si la taille est égale à zéro, alors vous pouvez ajouter
"No item inhere"
message à la liste de tableaux par faire une hashmapCréer une listview avec le " pas les objets trouvés à l'entrée par défaut. Lorsque le premier élément est ajouté, réinitialiser la liste et supprimez l'entrée par défaut.