由于RemoteViewFactory中没有getItemViewType()方法-它实际上如何确定ViewType?

我偶然发现了这样一种情况:我肯定只有4个viewType,但是不断出现显示错误(一项“正在加载...”)和一个日志条目,我将返回比getViewTypeCount建议的视图类型更多的视图类型。因此,我随机添加了+1,现在可以使用了。

所以在我看来,实际的viewType是由基础ListAdapter / AppWidgetHost猜测的,如果对RemoteViews实例进行大量修改,它将检测为新的viewType ...

有人知道实际发生了什么吗?

最佳答案

好,这是问题的答案(摘录自Android sources of RemoteViewsListAdapter):

for (RemoteViews rv: mRemoteViewsList) {
        if (!mViewTypes.contains(rv.getLayoutId())) {
            mViewTypes.add(rv.getLayoutId());
        }
    }
    if (mViewTypes.size() > mViewTypeCount || mViewTypeCount < 1) {
        throw new RuntimeException("Invalid view type count -- view type count must be >= 1" +
                "and must be as large as the total number of distinct view types");
    }


因此,Android使用LayoutId作为viewTypeReference。让我在应用程序中需要做一些研究,但回答了我的问题。

10-06 09:24