7

我正在尝试使用 Roman Nurik 的库(https://plus.google.com/113735310430199015092/posts/6cVymZvn3f4)制作一个向导。

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

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);
            }
        }
   }
});

但是它始终为空。

4

5 回答 5

11

里面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);

如果要将数据分配回向导,请将其放在 FragmentActivity 中 onCreate 的末尾:

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

关键“三明治:面包”来自示例,改变任何适合你的东西。永远不要尝试多一个,我认为它或多或少是相同的。

于 2013-03-04T17:13:04.873 回答
3

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

我很确定,您的mPagerAdapter::getItem代码看起来像示例中的(所以它只是返回了新的片段,而不是返回当前的寻呼机片段)。您必须使用instantiateItem来获取您的ReviewFragment.

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());
  }
}
于 2015-10-16T09:07:17.527 回答
0

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

    ArrayList<ReviewItem> reviewItems = new ArrayList<ReviewItem>();
    for (Page page : mWizardModel.getCurrentPageSequence()) {
        page.getReviewItems(reviewItems);
    }
于 2018-08-23T11:25:46.663 回答
0

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

public List<ReviewItem> getReviewItems() {
    return mCurrentReviewItems;
}

我不确定为什么开发人员没有添加它。这是项目中最重要的事情。选择物品并用它们做一些事情。

于 2018-02-13T23:45:05.780 回答
0

这是我的代码@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());
                    }
                }
            }
        }
    });
于 2017-09-25T09:21:13.170 回答