我正在尝试使用Roman Nurik的库(https://plus.google.com/113735310430199015092/posts/6cVymZvn3f4)创建一个向导。
我无法从Review Fragment访问收集的数据。 我在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);
}
}
}
});
然而它总是空的。
答案 0 :(得分: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);
}
关键词“三明治:面包”就是一个例子,改变任何适合你的方式。永远不要尝试多人,我认为它或多或少是相同的。
答案 1 :(得分: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());
}
}
答案 2 :(得分: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());
}
}
}
}
});
答案 3 :(得分:0)
最佳解决方案是将此库作为模块包含在项目中,并在ReviewFragment中实现自己的获取审阅项的方法。
public List<ReviewItem> getReviewItems() {
return mCurrentReviewItems;
}
我不确定开发人员为什么不添加它。这是项目中最重要的事情。选择项目并与他们做点什么。
答案 4 :(得分:0)
任何仍在寻找解决方案的人都可以使用以下代码
ArrayList<ReviewItem> reviewItems = new ArrayList<ReviewItem>();
for (Page page : mWizardModel.getCurrentPageSequence()) {
page.getReviewItems(reviewItems);
}