无法在自定义FragmentStatePagerAdapter中创建新的片段

时间:2015-02-23 19:18:11

标签: android android-viewpager fragmentstatepageradapter

我正在尝试使用对象列表预先填充FragmentStatePagerAdapter,但我无法实例化新片段。

背景

My PagerAdapter由Msg对象的ArrayList( mMsgConvoList)组成。 MsgConvoList是来自给定线程的所有消息的ArrayList。

mMsgConvoList的分区会创建每个3个消息的子列表( msgSublist )。

每个子列表都经过while循环,由PagerAdapter在创建新片段和添加其他文本视图时处理:

while循环中的逻辑如何工作:

如果count == 2,则表示应该有一个新片段,否则如果count为1到0,则找到currentFragment并添加Msg(这是发生错误的位置)。

错误:

在count == 2之后发生错误。在while循环的'else'部分,currentFragment为NULL(count = 1或0)。似乎永远不会调用MsgFragment上的instantiateItem。我不确定为什么在使用下面的循环时这不起作用。

Caused by: java.lang.NullPointerException
        at to.testing.viewpagertest.MsgPagerActivity.onCreate(MsgPagerActivity.java:55)

如果我从while循环中删除'else'条件中的所有代码,则会创建片段并将对象添加到文本视图中:

 if (count == 2){
     mAdapter.addMessages(msgSublist.get(count));
     mAdapter.notifyDataSetChanged();
     mViewPager.setCurrentItem(mAdapter.getCount(), true);

这告诉我一些事情:上面的代码,在while循环之外工作,因此数据集在textView中正常工作,并且片段正在成功创建。只有当我尝试向现有Array添加一个额外的Msg对象时,才能创建currentFragment。任何建议都会非常感激。

MsgPagerActivity:

    if(mMsgConvoList.size() > 0) {
        List msgPartitions = daoMsg.partitionArray(mMsgConvoList, 3);
        mAdapter = new CustomPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(mAdapter);

        for(int i = msgPartitions.size() - 1; i >= 0; i--){
            //extract msg objects from each sublist
            List<Msg> msgSublist = (List<Msg>)msgPartitions.get(i);
            int count = msgSublist.size() -1;

            while(count >= 0){
                if (count == 2){
                    mAdapter.addMessages(msgSublist.get(count));
                    mAdapter.notifyDataSetChanged();
                    mViewPager.setCurrentItem(mAdapter.getCount(), true);
                }else{
                    mViewPager.setCurrentItem(mAdapter.getCount(), true);
                    MsgFragment currentFragment = (MsgFragment)mAdapter.getFragmentAtPosition(
                            mAdapter.getCount() - 1);
                    currentFragment.addMessage(msgSublist.get(count));
                }
                count--;
            }

0 个答案:

没有答案