Benutzerdefinierte adapter getview wird nicht aufgerufen
Ich habe eine Benutzerdefinierte adapter mit einem ListFragment
aber der Adapter getView()
ist nicht immer genannt zu allen.
Dies ist, wie der adapter aussieht -
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;
}
}
- Und den 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);
}
}
Und dies ist, wie mein layout aussieht -
<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" />
Ich weiß nicht, was das problem hier ist.
@Override public int getCount() { return list.size(); }
. Nutzen Sie bitte google bevor du eine Frage stellst.Als Luksprog sagte, Sie brauchen, um etwas hinzuzufügen, um getCount. Es geht nicht, zu versuchen, und erstellen Sie alle Ansichten, wenn es denkt, du willst 0.
Bist du sicher, dass deine "Liste" ist nicht leer?
InformationsquelleAutor Akilan | 2013-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil getCount() gibt null zurück.
Die Nummer, die Sie zurück in getCount() die Zeiten der getView() wird aufgerufen.
In getCount() sollten Sie immer wieder die Größe der Liste.
Daher
Auch vielleicht die Layouts ListView-id ist nicht android.R.id.Liste?
Stellen Sie sicher, dass Sie im xml -
Auch, nicht immer passieren, dass irgendwelche Daten ein fragment im Konstruktor.
FALSCH:
RECHT:
Natürlich, Sie haben, um Ihr Modul Parcelable oder Serialisierbar.
Müssen Sie args-da das Fragment kann getötet werden, und wieder durch das system und übergeben Sie die Daten via Set-Methoden oder Konstruktoren werden Sie nicht wiederhergestellt werden, und daher kann sich null in einigen Fällen.
InformationsquelleAutor Yaroslav Mytkalyk
Löste ich dieses problem sauber durch das Lesen der
ArrayAdapter
code. Anscheinend hält Referenz auf eine interne Liste von Objekten. Alle die ich tun musste, war mein ArrayList Zeiger auf super-Konstruktor so:und ich habe nicht zu überschreiben
getItem
odergetCount
Methoden.Hinweis: Dies ist für
ArrayAdapter
- und API-Ebene 23+, so dass es möglicherweise nicht für Sie gelten.InformationsquelleAutor nurettin
Ich habe das gleiche problem, in meinem Fall habe ich nicht initialisiert meinem lokalen array-Liste in meinem
Fragment
Konstruktor.Verpasste ich die
mImageList = itemList;
Teil.Es ist nur ein Mann machte Fehler, aber es könnte hilfreich sein, um jemand vor dem gleichen Problem.
InformationsquelleAutor CLIFFORD P Y
getView () - Methode aufrufen, wenn der Datensatz mindestens einen Datensatz zur Anzeige in der Ansicht.
getView() : Liefert: Ein Blick in die entsprechenden Daten an der angegebenen position.
Und wenn wir die Größe des Datensatzes ist 0, daher ist die position auch 0.
Als Ergebnis getView () - Methode nicht aufrufen.
InformationsquelleAutor Android007
Ich hatte dieses problem und in meinem Fall, das problem war, dass ich fälschlicherweise erstellt 2 Adapter. Einer von Ihnen war ich vorbei, um
setAdapter
und der andere war ich mit hinzufügen von Elementen zu verwendenadd
. Also der adapter, was zählte, war, dass Sie nie Hinzugefügt.InformationsquelleAutor JoelFan