android:How 用一个适配器填充相同 activity 的两个列表视图

android:How to fill two list view of same activity with one adapter

我有两个列表和一个自定义适配器..两个列表具有相同的结构

mDrawerList = (ListView) findViewById(R.id.lv_left_drawer);
mDrawerListBottom = (ListView) findViewById(R.id.lv_left_drawer_bottom);

adapter = new DrawerItemsCustomAdapter(this);
mDrawerList.setAdapter(adapter);    
    adapter = new DrawerItemsCustomAdapter(this);
    mDrawerListBottom.setAdapter(adapter);

问:如何识别哪个ListView正在访问adapter,如何在adapter中识别class.

什么是以及如何使用?

   public Object getItem(int arg0) {
    return arg0;
}

public long getItemId(int arg0) {
    return arg0;
}

@Override
public int getItemViewType(int position) {
    return super.getItemViewType(position);
}

谢谢。

在两个不同的 ListView 中使用相同的适配器引用是不好的做法,因为修改基础数据需要您将更改通知两个 ListView。

所以不用这个

adapter = new DrawerItemsCustomAdapter(this);
mDrawerList.setAdapter(adapter);    
adapter = new DrawerItemsCustomAdapter(this);
mDrawerListBottom.setAdapter(adapter);

只需制作两个单独的适配器。

您可以使用相同的适配器 class 因为,如您所说,两个列表具有相同的结构。

DrawerItemsCustomAdapter adapter1 = new DrawerItemsCustomAdapter(this);
mDrawerList.setAdapter(adapter1);    
DrawerItemsCustomAdapter adapter2 = new DrawerItemsCustomAdapter(this);
mDrawerListBottom.setAdapter(adapter2);

不过,不清楚您在何处为这些适配器初始化了数据列表,因为它不是适配器的参数。

你的问题不是很清楚。我觉得你很困惑,如果我错了请纠正我。

您正在重复使用同一个对象来为另一个 ListView 创建适配器,从而覆盖了第一个。我假设您想单独处理它们,所以您应该使用一个新对象:

adapter1 = new DrawerItemsCustomAdapter(this);
mDrawerList.setAdapter(adapter1);    
adapter2 = new DrawerItemsCustomAdapter(this);
mDrawerListBottom.setAdapter(adapter2);

否则,无法随时确定哪个 ListView 实例正在使用 Adapter。

您应该为不同的 ListView 使用不同的适配器。适配器应该知道如何以单一方式填充 ListView。

            mDrawerList = (ListView) findViewById(R.id.lv_left_drawer);
            mDrawerListBottom = (ListView) findViewById(R.id.lv_left_drawer_bottom);

            adapter = new DrawerItemsCustomAdapter(this);
            mDrawerList.setAdapter(adapter);    
            adapter1 = new DrawerItemsCustomAdapter(this);
            mDrawerListBottom.setAdapter(adapter1);

           mDrawerList.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String s = adapter.getItem(position);
                    }
                });
           mDrawerListBottom.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                  String s = adapter1.getItem(position);
                    }
                });