0

我正在尝试使用 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在这里的回答)。

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

但是如何将数据分配给作为 BranchPage 子页面的第二个 CustomerInfoPage?我试过各种键,比如

mWizardModel.findByKey("Branch page:Page 2.2").resetData(data);

但没有运气。我尝试过的所有操作都会导致该特定行出现 NullPointerException。

请建议 - 提前谢谢!

4

1 回答 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”、“地址”、“Hourly:Hourly Wage”(这是一个分支)

键:“_”是我的 Page.SIMPLE_DATA_KEY(对于除 InfoPages 之外的所有值)“地址”是我的 CompanyInfoPage 键

加载到向导中的答案:“快速”、“60”、“14 Oak Wood Rd Brighton MA”、“$68.00”

//在 EmployerWizardPager 中的 onCreate 中的我的代码

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

祝你好运!

于 2014-01-04T16:04:42.310 回答