Verschiedene row-layouts in ListView
Dieser Beitrag ist im Zusammenhang mit diesem ViewHolder nicht funktioniert. Auf, die post, war ich nach einer Anleitung, wie zu verwenden ViewHolder
auf eine ListView
. Was ich will, jetzt ist der Letzte Punkt auf einer ListView
haben ein anderes layout als der rest. Hier ist mein code:
int lastpos = mList.size()-1;
System.out.println("position: "+position+" mlist: "+lastpos);
if(position==lastpos){
view = vi.inflate(R.layout.list_item_record, null);
holder.textView = (TextView)view.findViewById(R.id.record_view);
}else{
view = vi.inflate(R.layout.list_item_bn, null);
holder.textView = (TextView)view.findViewById(R.id.tv_name);
}
view.setTag(holder);
Bekomme ich nur die ListView
Größe minus 1
und haben eine Bedingung, die prüft, wenn die aktuelle position gleich dem letzten Element. Dieser code jedoch setzt das Letzte Element ist das layout ebenso wie der rest. getView
Methode vollständige code:
private class CustomListAdapter extends ArrayAdapter {
private ArrayList mList;
private Context mContext;
public CustomListAdapter(Context context, int textViewResourceId,
ArrayList list) {
super(context, textViewResourceId, list);
this.mList = list;
this.mContext = context;
}
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
final ToggleButton tb;
if (view == null) {
ViewHolder holder = new ViewHolder();
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int lastpos = mList.size()-1;
System.out.println("position: "+position+" mlist: "+lastpos);
if(position==lastpos){
view = vi.inflate(R.layout.list_item_record, null);
holder.textView = (TextView)view.findViewById(R.id.record_view);
}else{
view = vi.inflate(R.layout.list_item_bn, null);
holder.textView = (TextView)view.findViewById(R.id.tv_name);
}
view.setTag(holder);
}
final ItemsDisplay listItem = (ItemsDisplay) mList.get(position);
if (listItem != null) {
ViewHolder holder1 = (ViewHolder)view.getTag();
holder1.textView.setText(listItem.getTag());
view.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) { //--clickOnListItem
Toast.makeText(getBaseContext(),
"Button is "+position+" "+listItem.getTag(),
Toast.LENGTH_LONG).show();
}
});
tb = (ToggleButton) view.findViewById(R.id.toggleButton);
tb.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(tb.isChecked()){
Toast.makeText(getBaseContext(),
"Button is "+position+" checked:"+tb.isChecked()+" "+listItem.getTag(),
Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getBaseContext(),
"Button is "+position+" checked:"+tb.isChecked()+" "+listItem.getTag(),
Toast.LENGTH_LONG).show();
}
}
});
}
return view;
}
}
Könnte jemand mir dabei helfen?
- fügen Sie Ihre volle adapter-code...
- Hinzugefügt. das ist der vollständige code.
- wenn der loop ruft prüfen wie if(...){Syso("wenn-Schleife")}
- bitte check ` - System.aus.println("position: "+position+" mlist: "+lastpos);` in jeder position gedruckt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Umsetzung der
getItemViewType()
undgetViewTypeCount()
für Ihren adapter:und:
Dann in der
getView()
Methode finden Sie heraus, welche Art von anzeigen zu füllen:Beispiel aus den Kommentaren: http://pastebin.com/gn65240B (oder https://gist.github.com/2641914 )
getView
Methode für Positionen, die sind nicht noch gesehen. Wenn Sie scrollen Sie die Liste, die Sie sollten sehen, die andere Positionen als gut.getView
Methode, und die Zeilen erhalten recycelt. Ich habe ein einfaches Beispiel hier( pastebin.com/gn65240B ), so dass Sie sehen können, ein funktionierendes Beispiel.ListActivity
da könnte ich setup-Beispiel schneller(dabei ist es egal, was Aktivität, die Sie verwenden). Das Beispiel ist Recht einfach, man konnte darauf bauen, dass, um Ihre eigenen Zeile layout.getViewTypeCount
(Sie zurückkehren konnten 30 zum Beispiel). Sollten Sie implementieren die Logik, die zum bestimmen der Zeile Typ in dergetItemViewType
(dieMyClass
Element für diese position, sehen, welche Art von Zeile, die es erfordert und die Rückgabe der richtige Bezeichner für die Zeile Typ).Das problem ist, dass sobald Sie aufgeblasen ist der Ansicht, es kann wiederverwendet werden viele Male in jeder position. Ich würde vorschlagen, die folgenden Ansatz: Sie blähen alle, aber das Letzte Element wie gewohnt (einschließlich der anzeigen-Halter), aber für das Letzte Element, das Sie halten die Referenz im Bereich der
CustomListAdapter
und senden Sie es jedes mal, wenn das Letzte Element angefordert wird: