从调用Activity设置PagerAdapter中的项目计数

时间:2017-10-30 14:03:53

标签: android android-fragments android-pageradapter

我有一个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();

在某些时候,但我无法弄清楚我应该把它称为什么 - 或者确实如果我想要做的事情有更根本的错误。

1 个答案:

答案 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 
}