Неверный класс состояний, ожидающий состояния просмотра, но

Я получаю эту ошибку

java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class android.widget.AbsListView$SavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/unique111123234. Make sure other views do not use the same id. 

Эта ошибка возникает, когда я переключаюсь между вкладками в пейджере просмотра. Я использую пользовательский составной вид ниже

 public class RefreshableListView extends SwipeRefreshLayout { private ListView listView; private boolean disabled = false; private Context context = null; private AttributeSet attributes = null; private RelativeLayout layout; public RefreshableListView(Context context) { super(context); this.context = context; initView(); } public RefreshableListView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; this.attributes = attrs; initView(); } private void initListView() { listView = new ListView(context, attributes); layout = new RelativeLayout(context); this.addView(layout); layout.addView(listView); } private void initView() { initListView(); setColorScheme(android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_red_light); } public void setAdapter(ListAdapter adapter) { listView.setAdapter(adapter); } public void setOnItemClickListener(AdapterView.OnItemClickListener listener) { listView.setOnItemClickListener(listener); } @Override public boolean canChildScrollUp() { boolean canScroll = listView.getFirstVisiblePosition() != 0; if (disabled) { canScroll = true; } return canScroll; } public Object getItemAtPosition(int position) { return listView.getItemAtPosition(position); } public void setDisabled(boolean disable) { disabled = disable; } public boolean isDisabled() { return disabled; } public void setEmptyView(View emptyView) { layout.addView(emptyView); listView.setEmptyView(emptyView); } public void setSelection(int selection) { listView.setSelection(selection); } public int getFirstVisiblePosition() { return listView.getFirstVisiblePosition(); } public Adapter getAdapter() { return listView.getAdapter(); } public int getCount() { return listView.getCount(); } } 

Я в тупике, кто-нибудь подстрекает?

Кроме того, вы можете установить Id самостоятельно, чтобы избежать конфликтов. У меня была такая же ошибка, когда я добавлял представления программно к своему пользовательскому составному виджету!

В вашем случае исправление будет:

 private void initListView() { listView = new ListView(context, attributes); layout = new RelativeLayout(context); // Set Id's to ensure they are not the same listView.setId(1000); layout.setId(10001); this.addView(layout); layout.addView(listView); } 

Я предполагаю, что когда вы раздуваете ресурсы из XML, андроид назначает случайный идентификатор для завышенных просмотров

Я обнаружил, что если я раздуваю представления в initListView () из xml, он работает.