由于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。让我在应用程序中需要做一些研究,但回答了我的问题。