由于RemoteViewFactory中没有getItemViewType()
方法 - 它如何实际确定ViewType?
我偶然发现了一个案例,其中我确定只有4个viewTypes,但是一直有显示错误(“加载......”一个项目)和一个日志条目,我会返回比getViewTypeCount
建议更多的viewTypes。所以我随机添加了+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。让我在我的应用程序中做一些研究,但回答我的问题。