Как RemoteViewsFactory обрабатывает ViewTypes в Android? - PullRequest
0 голосов
/ 25 мая 2018

Поскольку в RemoteViewFactory отсутствует метод getItemViewType() - как он на самом деле определяет ViewType?

Я просто наткнулся на случай, когда у меня ОПРЕДЕЛЕННО было только 4 viewTypes, но я сохранилполучение ошибок отображения («загрузка ...» для одного элемента) и запись в журнале, в которой я вернул бы больше viewTypes, чем предлагает getViewTypeCount.Итак, я случайно добавил +1, и теперь это работает.

Так что мне кажется, что фактический viewType угадывается базовым ListAdapter / AppWidgetHost, и если вы делаете серьезные изменения в экземпляре RemoteViews, он обнаружит его какновый viewType ...

Кто-нибудь знает, что на самом деле происходит?

1 Ответ

0 голосов
/ 25 мая 2018

ОК, вот ответ на вопрос (взятый из Android-источников 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.Оставляет мне некоторые исследования в моем приложении, но отвечает на мой вопрос.

...