在扩展ArrayAdapter并覆盖getView时,传递资源/ textViewResourceId参数是否完全冗余?

时间:2016-06-15 00:33:48

标签: android android-arrayadapter

我一直在为ListViews定制ArrayAdapter,并且在扩展它们时,我总是简单地将-1(一个不存在的资源id)作为super的资源参数传递。当你还覆盖getView时,是否有任何潜在的好处(根本没有)在其中传递任何其他内容?

2 个答案:

答案 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才能显示。所以你有三个选择

  1. 使用文本项的默认布局。比如android.R.layout.simple_list_item_1

  2. 对文本项使用自定义布局,并提供textViewId来放置数据。 比如super(context, R.layout.list_item_layout, R.id.item_text_inside_layout, items);

  3. 使用自定义适配器,而不是ArrayAdapter。您可以延长BaseAdapter并夸大您想要的视图

  4. 希望有所帮助!