RemoteViewsFactory如何处理Android中的ViewTypes?

问题描述 投票:1回答:1

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

我偶然发现了一个案例,其中我确定只有4个viewTypes,但是一直有显示错误(“加载......”一个项目)和一个日志条目,我会返回比getViewTypeCount建议更多的viewTypes。所以我随机添加了+1,现在它可以工作了。

因此在我看来实际的viewType是由底层的ListAdapter / AppWidgetHost猜测的,如果你对RemoteViews实例进行大量修改,它会将它检测为一个新的viewType ...

有谁知道实际发生了什么?

android listview android-widget android-appwidget android-remoteview
1个回答
2
投票

好的,这是问题的答案(取自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。让我在我的应用程序中做一些研究,但回答我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.