【问题标题】:Get type of List<MyModelClass>获取 List<MyModelClass> 的类型
【发布时间】:2017-11-22 13:30:15
【问题描述】:

我在recycylerView 中膨胀多个布局视图,并通过覆盖getItemViewType() 方法来获取viewType

@Override
    public int getItemViewType(int position) {

        Log.e("getItemViewType ", myAllItemsList.get(position).getClass()+"");
        if (myAllItemsList.get(position) instanceof MyCategory) {
            return CATEGORY_VIEW;
        } else if (myAllItemsList.get(position) instanceof MyPromotion) {
            return PROMOTION_VIEW;
        } else {
            return ITEM_VIEW;
        }
    }

因为myAllItemsList 是对象类型

private List<Object> myAllItemsList = new ArrayList<>();

我将三种类型的对象传递给它

  1. List&lt;MyCategory&gt;
  2. MyPromotion
  3. List&lt;MyItem&gt;

在调用上述方法时,if condition 永远不会执行,因为在 myAllItemsList 中没有类似 MyCategory 的东西,而是包含 List&lt;MyCategoty&gt;。当我尝试

myAllItemsList.get(position) instanceof List<MyCategory>

Android Studio 说Illegal generic type for instenceof

所以我的问题是我怎样才能知道myAllItemsList 包含List&lt;MyCategory&gt;,这样我才能知道return CATEGORY_VIEW。 任何帮助将不胜感激。

【问题讨论】:

  • 看起来类似于this question
  • 您可以将List&lt;MyCategory&gt; 包装在Categories 类中(例如)。

标签: android list generics android-recyclerview adapter


【解决方案1】:

我通过获取对象解决了这个问题,并首先检查其类型是否为 List,然后迭代此列表的元素并检查是否为 instenceof MyClass(MyCategory)。

Object o = myAllItemsList.get(position);
        if (o instanceof List) {
            for (Object obj : (List) o) {
                if (obj instanceof MyCategory) {
                    Log.e("InsideInstenceof", "Success");
                    return CATEGORY_VIEW;
                }
            }
            return ITEM_VIEW;
        } else if (o instanceof MyPromotion) {
            return PROMOTION_VIEW;
        }

【讨论】:

    猜你喜欢
    • 2013-10-28
    • 2021-03-06
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2023-01-10
    相关资源
    最近更新 更多