Terapkan adaptor khusus untuk kelas Anda:
public class MyClassAdapter extends ArrayAdapter<MyClass> {
private static class ViewHolder {
private TextView itemView;
}
public MyClassAdapter(Context context, int textViewResourceId, ArrayList<MyClass> items) {
super(context, textViewResourceId, items);
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(this.getContext())
.inflate(R.layout.listview_association, parent, false);
viewHolder = new ViewHolder();
viewHolder.itemView = (TextView) convertView.findViewById(R.id.ItemView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
MyClass item = getItem(position);
if (item!= null) {
// My layout has only one TextView
// do whatever you want with your string and long
viewHolder.itemView.setText(String.format("%s %d", item.reason, item.long_val));
}
return convertView;
}
}
Bagi mereka yang tidak terbiasa dengan kerangka kerja Android, ini dijelaskan secara lebih rinci di sini: https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView .
textViewResourceId
tidak digunakan di atas?Anda bisa menambahkan
toString()
metode ke MyClass, per http://developer.android.com/reference/android/widget/ArrayAdapter.html :sumber
MyClass
, Anda harus refactor. Akhirnya, umumnya ide yang buruk untuk mengikat logika presentasi ke model Anda. Model seharusnya tidak menyadari bagaimana mereka disajikan kepada pengguna.MyClass
akan meminta Anda untuk menambahkan kelas khusus yang disebutMyClassView
yang membungkus model yang mendasarinya (dan menyediakantoString( )
implementasiSaya pikir ini adalah pendekatan terbaik. Menggunakan kelas ArrayAdapter generik dan memperluas adaptor Object Anda sendiri sesederhana berikut:
dan di sini adaptor Anda (contoh):
dan akhirnya, bagaimana menginisialisasi:
Saya telah membuat intisari dengan tata letak gravitasi TextView yang dapat disesuaikan ArrayAdapter:
https://gist.github.com/m3n0R/8822803
sumber
Subkelas ArrayAdapter dan ganti metode getView () untuk mengembalikan tampilan Anda sendiri yang berisi konten yang ingin Anda tampilkan.
sumber
Berikut adalah contoh cepat dan kotor tentang cara menggunakan ArrayAdapter jika Anda tidak ingin repot-repot memperpanjang kelas induk:
sumber