MergeAdapter与OnClickItemListener

时间:2014-02-26 07:08:04

标签: android listview commonsware-cwac

我正在使用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

1 个答案:

答案 0 :(得分:4)

您正在调用l.getAdapter().getItem(position)两次并将其转换为两个不同的类。除非这些类通过继承相关,按照定义,否则会因ClassCastException而崩溃。

仅拨打l.getAdapter().getItem(position)一次。您需要根据position或使用instanceof运算符确定要投放到哪个类。