Android FragmentPagerAdapter:java.lang.IllegalStateException:应用程序的PagerAdapter更改了适配器的内容
正在尝试使用导航抽屉中的视图寻呼机创建应用程序。我有从导航中选择的选项,根据外部选择,我必须在视图寻呼机中填充不同数量的片段 我已经使用教程创建了导航抽屉,并与谷歌文档分开查看寻呼机。根据文档,视图寻呼机有固定数量的片段。如果我硬编码的方式,一切都很好 但是,当我试图根据左选择使其动态时,我得到了非法的状态异常 例如,我实现了fragmentstatepageradapterAndroid FragmentPagerAdapter:java.lang.IllegalStateException:应用程序的PagerAdapter更改了适配器的内容,android,android-fragments,android-viewpager,navigation-drawer,Android,Android Fragments,Android Viewpager,Navigation Drawer,正在尝试使用导航抽屉中的视图寻呼机创建应用程序。我有从导航中选择的选项,根据外部选择,我必须在视图寻呼机中填充不同数量的片段 我已经使用教程创建了导航抽屉,并与谷歌文档分开查看寻呼机。根据文档,视图寻呼机有固定数量的片段。如果我硬编码的方式,一切都很好 但是,当我试图根据左选择使其动态时,我得到了非法的状态异常 例如,我实现了fragmentstatepageradapter public class innerFragment extends Fragment { Sections
public class innerFragment extends Fragment {
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
public static final String active_outer_option = "section_number";
public innerFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_outer, container,
false);
Log.d("logs", "onCreateView:innerFragment()");
mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) rootView.findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
((MainActivity) activity).onSectionAttached(Integer
.parseInt(getArguments().getString(active_outer_option)));
Log.d("logs", "onAttach:innerFragment()");
}
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
private int active_outer_option= 0;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Log.d("logs", "getItem(int " + position + ")");
active_outer_option = position;
Bundle b = new Bundle();
b.putString("section_number", "" + position);
DummySectionFragment fragment = new DummySectionFragment();
fragment.setArguments(b);
return fragment;
}
@Override
public int getCount() {
switch (active_outer_option) {
case 0:
return 9;
case 1:
return 2;
case 2:
return 2;
case 3:
return 2;
case 4:
return 4;
default:
return 0;
}
}
@Override
public CharSequence getPageTitle(int position) {
Log.d("logs", "getPageTitle(int " + position + ")");
return "OP " + String.valueOf(position);
}
}
public static class DummySectionFragment extends Fragment {
public static final String ARG_SECTION_NUMBER = "section_number";
public DummySectionFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d("logs", "onCreateView:DummySectionFragment()");
View rootView = inflater.inflate(R.layout.fragment_inner,
container, false);
TextView dummyTextView = (TextView) rootView
.findViewById(R.id.section_label);
dummyTextView.setText(getArguments().getString(ARG_SECTION_NUMBER));
return rootView;
}
}
}
运行此应用程序时,其应用程序停止工作,异常为:
java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 9, found: 2 Pager id: com.xxx.xxx:id/pager Pager class: class android.support.v4.view.ViewPager Problematic adapter: class com.xxx.xxx.innerFragment$SectionsPagerAdapter
知道那个异常和代码有什么问题吗
编辑:
从调试开始,一切正常,使用索引0和1调用gettitle两次,然后使用索引和获取异常调用getcount
这有什么意义吗?从异常情况来看,您似乎从适配器中删除了一些项目。@Sufian i根本没有更新适配器。我可以说的是,第一个外部选项将给出9个内部选项片段,第二个外部选项将给出2个内部选项片段。我从文档中读到的内容是,view pager加载第二页进行分页。在我的例子中,这可能是一个问题吗?我不确定,但是我想说,根据active\u outer\u选项的值,getCount返回不同的值。PagerAdapter不喜欢这样,因此抛出了异常。是否要在其中显示分段列表视图?我已经解决了。这是商业逻辑上的错误。正如我所料,activity正在尝试在view pager中加载第二个视图,我将该索引设置为active_outer_选项,这是错误的。无论如何,谢谢你们。