Adaptateur personnalisé getview n'est pas appelé
J'ai un Coutume adaptateur avec un ListFragment
mais les cartes getView()
n'est pas prise en appelle à tous.
C'est la façon dont la carte ressemble -
public class ModuleListItemAdapter extends BaseAdapter {
List<ModuleItem> list;
Context context;
Module mod;
public ModuleListItemAdapter() {
super();
//TODO Auto-generated constructor stub
}
public ModuleListItemAdapter(Context context, List<ModuleItem> list, Module mod) {
super();
this.list = list;
this.context = context;
this.mod = mod;
//TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
RelativeLayout rl = (RelativeLayout) inflater.inflate(R.layout.moduleitem, null);
GenerateModuleItemView gmiv = new GenerateModuleItemView(context);
rl.addView(gmiv.itemDispView(mod.getFields(), list.get(position)));
return rl;
}
public void setValue(List<ModuleItem> l) {
this.list = l;
notifyDataSetChanged();
}
public void addValue(ModuleItem item) {
this.list.add(item);
notifyDataSetChanged();
}
@Override
public int getCount() {
//TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
//TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
//TODO Auto-generated method stub
return 0;
}
}
Et le Fragment -
public class ModuleItemListFragment extends ListFragment {
List<ModuleItem> list;
Module mod;
public ModuleItemListFragment() {
super();
//TODO Auto-generated constructor stub
}
public ModuleItemListFragment(List<ModuleItem> list, Module mod) {
super();
this.list = list;
this.mod = mod;
//TODO Auto-generated constructor stub
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//TODO Auto-generated method stub
return inflater.inflate(R.layout.list, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ModuleListItemAdapter adapter = new ModuleListItemAdapter(getActivity(), list, mod);
setListAdapter(adapter);
}
}
Et c'est ainsi que ma mise en page ressemble -
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#000000"
android:dividerHeight="1dip" />
Je ne sais pas quel est le problème ici.
@Override public int getCount() { return list.size(); }
. Veuillez utiliser google avant de poser une question.bro sa ne fonctionne pas bien
Comme Luksprog dit, vous avez besoin d'ajouter quelque chose à getCount. Il ne va pas essayer de créer tout point de vue si il pense que vous voulez 0.
Êtes-vous sûr que votre "liste" n'est pas vide?
OriginalL'auteur Akilan | 2013-04-27
Vous devez vous connecter pour publier un commentaire.
C'est parce que getCount() renvoie zéro.
Le nombre que vous retournez dans getCount() est à la fois le getView() sera appelée.
Dans getCount (), vous devez toujours le retour de la taille de la liste.
Donc
Aussi, peut-être la mise en page du ListView id n'est pas android.R.id.liste?
Assurez-vous d'avoir en xml
Aussi, ne jamais passer des données à un fragment dans le constructeur.
MAL:
DROIT:
Bien sûr, vous avez pour faire de votre Module Parcelable ou Serializable.
Vous devez spécifier des arguments parce que le Fragment peut être tué et restauré par le système et si vous transmettez des données via des incubateurs ou des constructeurs, ils ne seront pas restaurés et, par conséquent, peut devenir nulle dans certaines circonstances.
OriginalL'auteur Yaroslav Mytkalyk
J'ai résolu ce problème proprement par la lecture de la
ArrayAdapter
code. Apparemment, il conserve la référence à une liste interne des objets. Tout ce que j'avais à faire était de passer mon ArrayList pointeur de super constructeur ainsi:et je n'avais pas à remplacer toute
getItem
ougetCount
méthodes.Note: C'est pour
ArrayAdapter
et de l'API de niveau 23+ donc il peut ne pas s'appliquer à vous.OriginalL'auteur nurettin
J'ai le même problème, dans mon cas, je n'ai pas initialisé mon local liste de tableau dans mon
Fragment
constructeur.J'ai raté le
mImageList = itemList;
partie.Il est seulement un homme fait d'erreur, mais il pourrait être utile à quelqu'un face à la même question.
OriginalL'auteur CLIFFORD P Y
getView() la méthode de l'appelant lorsque l'ensemble de données a au moins un enregistrement à afficher dans la vue.
getView() : Retourne: Une Vue correspondant aux données à la position spécifiée.
Et si nous la taille du jeu de données est 0 par conséquent, la position est également 0.
Comme un résultat getView() la méthode n'est pas l'appel.
OriginalL'auteur Android007
J'ai eu ce problème et, dans mon cas, le problème est que j'ai malencontreusement créé 2 cartes. L'un d'eux, j'étais de passage à
setAdapter
et l'autre je l'utilise pour ajouter des éléments à l'aide deadd
. Donc la carte qui comptait, c'était de ne jamais être ajoutés.OriginalL'auteur JoelFan