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);
}
});
我有两个列表和一个自定义适配器..两个列表具有相同的结构
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);
}
});