【问题标题】:android:How to fill two list view of same activity with one adapterandroid:如何用一个适配器填充相同活动的两个列表视图
【发布时间】:2016-02-08 17:20:42
【问题描述】:

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

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正在访问适配器,如何在适配器类中识别。

什么是&如何使用?

   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正在访问适配器,你正在传递ArrayList检查它
  • 为什么有两行写着adapter = new DrawerItemsCustomAdapter(this);
  • 谢谢,我很困惑......每个 ListView 的适配器对象是完美的答案......谢谢大家

标签: android listview android-adapter custom-adapter


【解决方案1】:

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

所以不是这个

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    否则,任何时候都无法确定 ListView 的哪个实例正在使用 Adapter。

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

    【讨论】:

      【解决方案3】:
                  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);
                          }
                      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-27
        • 1970-01-01
        • 2015-05-26
        • 1970-01-01
        相关资源
        最近更新 更多