我正在尝试使用Roman Nurik的WizardPager库来添加和编辑自定义对象,但是我遇到了将数据分配到某些页面的麻烦(我想我准备好访问数据时会很困难保存它也是如此)。我没有得到findByKey()的概念,也无法将数据分配给位于BranchPage“下面”的页面。
示例:
我的向导模型如下所示:
protected PageList onNewRootPageList() {
return new PageList(
new CustomerInfoPage(this, "Page 1"),
new BranchPage(this, "Branch page")
.addBranch("Alternative 1", new SingleFixedChoicePage(this, "Page 2.1"))
.addBranch("Alternative 2", new CustomerInfoPage(this, "Page 2.2"))
);
}
使用MainActivity.java中的以下代码将数据分配到第一页可以正常工作。 (感谢Allen Chan的回答here)。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wizard_main);
...
Bundle data = new Bundle();
if (!TextUtils.isEmpty(CustomerInfoPage.MY_DATA_KEY)) {
data.putString(CustomerInfoPage.MY_DATA_KEY, person.getName());
mWizardModel.findByKey("Page 1").resetData(data);
}
但是如何将数据分配给第二个CustomerInfoPage作为BranchPage的子页面? 我尝试过各种各样的按键,比如
mWizardModel.findByKey("Branch page:Page 2.2").resetData(data);
但没有运气。我尝试的所有内容都会在该特定行上导致NullPointerException。
请建议 - 提前致谢!
答案 0 :(得分:1)
第1个问题)从分支中检索数据
单击mNextButton时在EmployerWizardPager中
if (mPager.getCurrentItem() == mCurrentPageSequence.size()){
//your example
mWizardModel.findByKey("Alternative 1:Page 2.1").getData().getString(Page.SIMPLE_DATA_KEY);
mWizardModel.findByKey("Alternative 2:Page 2.2").getData().getString(Page.SIMPLE_DATA_KEY);
}
第二个问题)将数据加载到WizardPager
我不确定这是否是最好的方法,但这就是我完成向向导加载数据的方法。我将我的值保存在外部数据库中(您也可以保存在SQLite或共享首选项中)。
我在WizardFragment中提供的一些示例代码用于澄清:
new SingleFixedChoicePage(this, "HoursPerWeek")
.setChoices("15", "20", "25", "30", "35", "40", "50", "60")
.setRequired(true),
标题(也是关键): “搜索类型”,“HoursPerWeek”,“地址”,“每小时:每小时工资”(这是一个分支)
键: “_”是我的Page.SIMPLE_DATA_KEY(除了InfoPages之外的所有值) “地址”是我对CompanyInfoPage的关键
加载到向导中的答案: “快速”,“60”,“14 Oakwood Rd Brighton MA”,“$ 68.00”
// EmployerWizardPager中onCreate的MY CODE
Bundle bundle = new Bundle();
Bundle bdl1 = new Bundle();
bdl1.putString("_","Quick");
bundle.putBundle("Type of search",bdl1);
Bundle bdl2 = new Bundle();
bdl2.putString("_","60");
bundle.putBundle("HoursPerWeek",bdl2);
Bundle bdl3 = new Bundle();
bdl3.putString("address","14 Oak Wood Rd Brighton MA");
bundle.putBundle("Address",bdl3);
Bundle bdl4 = new Bundle();
bdl4.putString("_","$68.00");
bundle.putBundle("Hourly:Hourly Wage",bdl4);
mWizardModel.load(bundle);
祝你好运!