通过调用 Activity 在 PagerAdapter 中设置项目计数
Setting the item count in a PagerAdapter from the calling Activity
我有一个 Activity 调用包含 ViewPager 的第二个 Activity。
第一个 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.
在接收Activity我声明
static int i_split_ways = 2;
在 Activity class 声明之后。
然后在 Activity 的 onCreate 方法中从 activity 调用中的额外数据分配值,如下所示。
Intent intent = getIntent();
i_split_ways = intent.getExtras().getInt("i_split_ways",1);
最后,在 PagerAdapter
class 的 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;
}
请注意,此处的逻辑需要一些工作,但这与此处的问题无关。
我遇到的问题是,当我启动第二个 activity 时,当 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();
在某些时候,但我不知道我应该在哪里调用它 - 或者实际上如果我正在尝试做的事情有更根本的错误。
每次基础数据发生变化时都需要调用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
}
我有一个 Activity 调用包含 ViewPager 的第二个 Activity。
第一个 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.
在接收Activity我声明
static int i_split_ways = 2;
在 Activity class 声明之后。
然后在 Activity 的 onCreate 方法中从 activity 调用中的额外数据分配值,如下所示。
Intent intent = getIntent();
i_split_ways = intent.getExtras().getInt("i_split_ways",1);
最后,在 PagerAdapter
class 的 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;
}
请注意,此处的逻辑需要一些工作,但这与此处的问题无关。
我遇到的问题是,当我启动第二个 activity 时,当 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();
在某些时候,但我不知道我应该在哪里调用它 - 或者实际上如果我正在尝试做的事情有更根本的错误。
每次基础数据发生变化时都需要调用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
}