Android 罗马努里克';s向导寻呼机-如何访问收集的数据?

Android 罗马努里克';s向导寻呼机-如何访问收集的数据?,android,nullpointerexception,wizard,Android,Nullpointerexception,Wizard,我正在尝试使用Roman Nurik的库()制作一个向导 我无法访问从审查片段收集的数据。 我在ReviewFragment中公开了McUrrentViewItems,然后像这样尝试 mNextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mPager.getCurrentItem() == mCurrent

我正在尝试使用Roman Nurik的库()制作一个向导

我无法访问从审查片段收集的数据。 我在ReviewFragment中公开了McUrrentViewItems,然后像这样尝试

mNextButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (mPager.getCurrentItem() == mCurrentPageSequence.size()) {
            ReviewFragment reviewFragment = (ReviewFragment)  mPagerAdapter.getItem(mPager.getCurrentItem());

            for (ReviewItem item : reviewFragment.mCurrentReviewItems)
                Log.d(MainActivity.TAG, "Item: " + item.getDisplayValue());
            }

        } else {
            if (mEditingAfterReview) {
                mPager.setCurrentItem(mPagerAdapter.getCount() - 1);
            } else {
                    mPager.setCurrentItem(mPager.getCurrentItem() + 1);
            }
        }
   }
});
但是它总是空的。

if(mPager.getCurrentItem()==mCurrentPageSequence.size()){}

对于单页变量:

String data = mWizardModel.findByKey("Sandwich:Bread").getData().getString(Page.SIMPLE_DATA_KEY);
对于自定义页面:

String data = 
mWizardModel.findByKey(THE_KEY).getData().getString(CustomerInfoPage.YOUR_DATA_KEY);
如果要将数据分配回向导,请将其放在onCreate in FragmentActivity的末尾:

Bundle data = new Bundle();
if (!TextUtils.isEmpty(DATA_STRING)) {
    data.putString(Page.SIMPLE_DATA_KEY, DATA_STRING);
    mWizardModel.findByKey("Sandwich:Bread"").resetData(data);
}

关键的“三明治:面包”来自于这个例子,改变任何适合你的东西。千万不要尝试多人模式,我认为大致相同。

很抱歉耽搁了这么久,但我认为有人会发现这些信息很有用。我找到了一种获取所有
ReviewItems
的方法,因为您可能有很多分支,而您将无法使用第一个答案

我非常确定,您的
mPagerAdapter::getItem
代码与示例中的代码类似(因此它只返回了新的片段,而不是返回当前的寻呼机片段)。您必须使用
实例化项
来获取您的
审阅片段
的参考

Object o = mPager.getAdapter().instantiateItem(mPager, mPager.getCurrentItem());
if(o instanceof ReviewFragment) {
  List<ReviewItem> items = ((ReviewFragment) o).getCurrentReviewItems();
  if(items != null) {
    Log.v(TAG, "Items are: " + items.toString());
  }
}
Object o=mPager.getAdapter().instanceItem(mPager,mPager.getCurrentItem());
if(o审查碎片实例){
列表项=((ReviewFragment)o).getCurrentReviewItems();
如果(项!=null){
Log.v(标记“Items are:+Items.toString());
}
}

这是我的代码@Anton_Shkurenko

mNextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (mPager.getCurrentItem() == mCurrentPageSequence.size()) {
                Object o = mPager.getAdapter().instantiateItem(mPager, mPager.getCurrentItem());
                if(o instanceof ReviewFragment) {
                    List<ReviewItem> items = ((ReviewFragment) o).getCurrentReviewItems();
                    if(items != null) {
                        Log.v(TAG, "Items are: " + items.toString());
                    }
                }
            }
        }
    });
mNextButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(mPager.getCurrentItem()==mCurrentPageSequence.size()){
对象o=mPager.getAdapter().instanceItem(mPager,mPager.getCurrentItem());
if(o审查碎片实例){
列表项=((ReviewFragment)o).getCurrentReviewItems();
如果(项!=null){
Log.v(标记“Items are:+Items.toString());
}
}
}
}
});

最好的解决方案是将此库作为模块包含在项目中,并实现您自己的方法来获取ReviewFragment中的审阅项

public List<ReviewItem> getReviewItems() {
    return mCurrentReviewItems;
}
公共列表getReviewItems(){
返回mCurrentReviewItems;
}

我不知道为什么开发者没有添加这个。这是项目中最重要的事情。选择项目并对其进行处理。

仍在寻找此问题解决方案的任何人都可以使用以下代码

    ArrayList<ReviewItem> reviewItems = new ArrayList<ReviewItem>();
    for (Page page : mWizardModel.getCurrentPageSequence()) {
        page.getReviewItems(reviewItems);
    }
ArrayList reviewItems=new ArrayList();
对于(页面:mWizardModel.getCurrentPageSequence()){
page.getReviewItems(reviewItems);
}

当您对多个页面使用相同的标题时会发生什么?@Olayinka:PageList类只是在ArrayList中的所有页面上迭代,直到其中一个页面与键匹配为止。所以,如果您碰巧设置了相同的标题(=具有相同的键),您将只得到迭代期间出现的第一个标题。可能不是您所期望的。请帮助我从行列表项=((ReviewFragment)o.getCurrentReviewItems()中获取无法解析方法getCurrentReviewItems()的错误;在上面