我有一个Activity,它调用包含ViewPager的第二个Activity。
第一个活动包括额外数据,用于(间接)定义ViewPager中有多少项目。
第一个Activity的调用代码是:
myIntent.setClass(getApplicationContext(),ShowAndTellMultiplesActivity.class);
myIntent.putExtra("i_split_ways",v_integer_value);
startActivity(myIntent);
i_split_ways
值用于计算在ViewPager中创建的项目数 - 实际上,如果此值为> 2然后计数应为i_split_ways -1
,如果是> { 5然后项目数应为5。
在接收活动中我声明
static int i_split_ways = 2;
在Activity类声明之后。
然后在Activity的onCreate方法中,从活动调用中的Extra数据中分配值,如下所示。
Intent intent = getIntent();
i_split_ways = intent.getExtras().getInt("i_split_ways",1);
最后在PagerAdapter
类的getCount()函数中,我计算了我想要显示的项目数,如下所示。
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
return PlaceholderFragment.newInstance(position + 1);
}
@Override
public int getCount() {
if (i_split_ways > 5) i_split_ways = 5 ;
if (i_split_ways <= 2) i_split_ways = 2;
return i_split_ways;
}
请注意,此处的逻辑需要一些工作,但这与此处的问题无关。
我遇到的问题是,当i_split_ways为3以外的其他任何内容时,当我启动第二个活动时,我会收到一个错误,例如The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 2, found: 4
。
我可以看到问题可能与我需要致电
有关 mSectionsPagerAdapter.notifyDataSetChanged();
在某些时候,但我无法弄清楚我应该把它称为什么 - 或者确实如果我想要做的事情有更根本的错误。
答案 0 :(得分:0)
每次基础数据发生变化时,您都需要调用mSectionsPagerAdapter.notifyDataSetChanged();
。
根据您提供的信息判断我猜测您正在做类似的事情:
@Override
protected void onCreate(Bundle savedInstance) {
// calling super and setting content view
mSectionsViewPager.setAdapter(mSectionsPagerAdapter);
// maybe some more stuff
Intent intent = getIntent();
i_split_ways = intent.getExtras().getInt("i_split_ways",1);
}
如果您在将适配器设置为viewpager之前更改i_split_ways
变量,则您不必调用notifyDataSetChanged()
。所以它看起来像这样:
@Override
protected void onCreate(Bundle savedInstance) {
// calling super and setting content view
Intent intent = getIntent();
i_split_ways = intent.getExtras().getInt("i_split_ways",1);
mSectionsViewPager.setAdapter(mSectionsPagerAdapter);
// maybe some more stuff
}