我正在使用CommonsWare的MergeAdapter来合并两个ListView。
请注意,两个listviews都有自己的模型。
一切顺利,除非我想从合并的Listview中点击一个项目,我似乎无法获得正确的数据代表其相应的模型。我见过这个answer,虽然它没有完全解决我想要的问题。
这是我实现MergeAdapter的方法:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// merge adapter
mAdapter = new MergeAdapter();
// user list
arrUserVanities = new ArrayList<UserVanitiesModel>();
uva = new UserVanitiesAdapter(arrUserVanities, getActivity());
mAdapter.addAdapter(uva);
// user category
arrUserCategory = new ArrayList<UserCategoriesModel>();
uca = new UserCategoryAdapter(arrUserCategory, getActivity());
mAdapter.addAdapter(uca);
setListAdapter(mAdapter);
}
在onItemClickListener
:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
UserVanitiesModel vanityModel = (UserVanitiesModel) l.getAdapter().getItem(position);
String vanity_id = vanityModel.getVanity_id();
String vanity_name = vanityModel.getVanity_name();
UserCategoriesModel categoryModel = (UserCategoriesModel) l.getAdapter().getItem(position);
String category_id = categoryModel.getCategory_id();
String category_name = categoryModel.getCategory_name();
Log.d(TAG, "Item clicked: "+category_name);
Log.d(TAG, "Item clicked: "+vanity_name);
// mListener.onUserCategoriesSelected(category_id, category_name);
}
我被困在这里。如何在合并列表视图中获取相应的对象并从中获取任何数据?我将这些数据传递给接口侦听器。
更新
我有两个要合并的Listviews,即用户列表(由UserVanitiesAdapter
支持)和用户类别(由UserCategoriesAdapter
支持)
这是我点击项目时遇到的错误:
java.lang.ClassCastException: com.example.model.usershop.UserCategoriesModel cannot be cast to com.example.model.usershop.UserVanitiesModel
或者如果点击第二个列表视图则相反。
java.lang.ClassCastException: com.example.model.usershop.UserVanitiesModel cannot be cast to com.example.model.usershop.UserCategoriesModel
答案 0 :(得分:4)
您正在调用l.getAdapter().getItem(position)
两次并将其转换为两个不同的类。除非这些类通过继承相关,按照定义,否则会因ClassCastException
而崩溃。
仅拨打l.getAdapter().getItem(position)
一次。您需要根据position
或使用instanceof
运算符确定要投放到哪个类。