我一直在为ListViews定制ArrayAdapter,并且在扩展它们时,我总是简单地将-1(一个不存在的资源id)作为super的资源参数传递。当你还覆盖getView时,是否有任何潜在的好处(根本没有)在其中传递任何其他内容?
答案 0 :(得分:1)
当你还覆盖getView时,是否有任何其他的好处(在根本上)传递它的位置?
不确定。如果您传递实际布局和TextView
资源ID,则可以让super.getView()
方法处理View
通货膨胀,并在单个TextView
上分配文字。然后,您的getView()
覆盖只需要“填空”。
例如,假设我们有以下简单的列表项类:
public class Item {
String text;
int imageResId;
public Item(String text, int imageResId) {
this.text = text;
this.imageResId = imageResId;
}
@Override
public String toString() {
return text;
}
}
一个简单的项目布局如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<ImageView android:id="@+id/item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView android:id="@+id/item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
然后我们的ArrayAdapter
子类就是这样:
public class MyAdapter extends ArrayAdapter<Item> {
public MyAdapter(Context context, List<Item> items) {
super(context, R.layout.list_item, R.id.item_text, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
((ImageView) v.findViewById(R.id.item_image))
.setImageResource(getItem(position).imageResId);
return v;
}
}
请注意,我们会在toString()
课程中实施Item
覆盖,以便向String
提供正确的ArrayAdapter
。
答案 1 :(得分:1)
super(context, R.layout.list_item_layout, R.id.item_text_inside_layout, items);
当您想要为ListView / Gridview使用自定义布局时,第3个参数很有用。
ArrayAdapter使用Object.toString()
获取Listview中每个项目的值。它必须有一个TextView才能显示。所以你有三个选择
使用文本项的默认布局。比如android.R.layout.simple_list_item_1
对文本项使用自定义布局,并提供textViewId来放置数据。
比如super(context, R.layout.list_item_layout, R.id.item_text_inside_layout, items);
使用自定义适配器,而不是ArrayAdapter
。您可以延长BaseAdapter
并夸大您想要的视图
希望有所帮助!