为什么在自定义适配器中使用额外的List(或数组)?

时间:2014-03-13 09:17:20

标签: android android-listview android-arrayadapter android-adapter

我已经问过自己上面的问题,到目前为止还没有找到真正的解决方案。

下面您可以看到{strong} ListView持有Strings自定义适配器的两种实现。第一个实现使用Adapter中的附加列表值,就像我在许多ListView教程中看到的那样。 (例如vogella-listview-tutorial

public class CustomAdapter extends ArrayAdapter<String> {

    private ArrayList<String> mList;

    public CustomAdapter(Context context, List< String > objects) {
        super(context, 0, objects);
        mList = objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        String item = mList.get(position);

        // ... do stuff ...

        return convertView;
    }
}

下面的第二个实现只使用已经传递给List的{​​{1}} Strings,而不需要额外的列表。相反,使用Adapter Adapters方法:

getItem(int pos)

现在我的问题:

当您只需使用适配器public class CustomAdapter extends ArrayAdapter<String> { public CustomAdapter(Context context, List< String > objects) { super(context, 0, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) { String item = getItem(position); // ... do stuff ... return convertView; } } 方法时,在List内使用附加 CustomAdapter的原因是什么原因并节省额外的getItem(int pos)

1 个答案:

答案 0 :(得分:1)

由于您要扩展ArrayAdapter扩展BaseAdapter,因此您无需拥有数据集的副本,但将其提供给super就足够了。如果您扩展另一个适配器BaseAdapter,则必须覆盖

  1. getCount()
  2. getItem(int)
  3. getView(int position, View convertView, ViewGroup parent)
  4. getItemId(int)
  5. 访问数据集的所有要求。