【问题标题】:MergeAdapter with OnClickItemListenerMergeAdapter 与 OnClickItemListener
【发布时间】:2014-02-26 07:08:03
【问题描述】:

我正在使用 CommonsWare 的 MergeAdapter 来合并两个 ListView。

请注意,两个列表视图都有自己的模型。

一切都很顺利,除了当我想从合并的 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);
    }

我被困在这个问题上。如何在合并的列表视图中获取相应的对象并从中获取任何数据?我正在将这些数据传递给接口侦听器。


更新

我有两个Listview要合并,分别是用户列表(由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

【问题讨论】:

  • 即兴发挥,您所拥有的一切似乎都很好。请完整而准确地解释什么是行不通的。
  • 我已经更新了添加堆栈跟踪的问题。

标签: android listview commonsware-cwac


【解决方案1】:

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

只调用一次l.getAdapter().getItem(position)。您需要根据position 或使用instanceof 运算符来确定要转换为哪个类。

【讨论】:

  • 我对@9​​87654326@ 运算符不太熟悉。我是否必须覆盖库的 getItem 才能知道单击的项目来自哪个适配器?
  • 没有。 instanceof 是标准 Java 的一部分。或者,让两个模型都实现某个通用接口,转换为该接口,然后调用接口上的某个方法来确定如何处理该对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多