2

As there is no getItemViewType() method in RemoteViewFactory - how does it actually determine the ViewType?

I just stumbled upon a case where I DEFINITELY had only 4 viewTypes, but kept getting display errors ("loading..." for one item) and a log entry that I would return more viewTypes than the getViewTypeCount suggests. So I randomly added +1 and now it works.

So it seems to me that the actual viewType is guessed by the underlying ListAdapter/AppWidgetHost and if you do heavy modifications to a RemoteViews instance it will detect it as a new viewType...

Does anyone know what's actually happening?

Adinia
  • 3,722
  • 5
  • 40
  • 58
joe1806772
  • 506
  • 6
  • 20

1 Answers1

3

OK, here's the answer to the question (taken from the 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");
    }

So Android uses the LayoutId as viewTypeReference. Leaves me with some research to do in my app, but answers my question.

joe1806772
  • 506
  • 6
  • 20