3

我想不出更好的问题标题:(

在我的应用程序中,我需要一个像提问者一样有 10 多个问题的东西,每次 1 个问题。

我所做的是:

  1. 有 1 个活动说 MainActivity,在其 onCreate() 中以编程方式添加一个片段说 Frag_1

  2. 在 Frag_1 中,我有一个接口,该接口onButtonClickedListener带有一种方法onClicked来回调 Activity 以了解单击了哪个选项等..,

  3. 在我的 MainActivity 中实现了该接口的 onClicked 方法,在该方法中我将 Fragment 更改为 Frag_2(第二个问题)等等。

问题是:

我最终得到了 10 个片段,而我的 MainActivity 实现了 10 个接口,每个片段都有 1 个。将来我可能有 30-40 个问题。

编辑:

每个问题都不会相似。问题的答案选项是 EditText/Spinner/RadioButtons 等,所以我不能使用相同的片段而只是更改问题和答案选项文本。

有没有更好、更有效的方法来解决这个问题

谢谢你

4

1 回答 1

1

您快到了。为 MainActivity 实现一个更广泛/通用的接口。也许是这样的public void fragClickCallback(int fragId, Bundle data);

这样,在您的实施中,您可以switch() case知道来自哪个问题,并且您的捆绑包可以为不同类型的答案打包不同的键(int 用于单选按钮/微调器,String 用于开放答案等)。

并确保在您.replace(...)之前用于删除片段的每个片段事务中。

编辑

此外,还有一些巧妙的方法可以让您构建片段,而不必创建数十亿个片段。可以有多少种不同类型的问题?算一算:

  • 多项选择(单选)-> 整数(索引)
  • 多项选择(多个答案)-> 整数(标志)
  • 数字输入 -> 浮点数/双精度数
  • 编辑文本 -> 字符串
  • 日期选择器 -> 长(纪元)
  • 时间选择器 -> 3 个整数(?)

所以我们有 6 个片段和 6 种处理方式switch statement,现在只需将正确的参数传递给片段

编辑:

  @Override
   public void onSaveInstanceState(Bundle outState) {
       super.onSaveInstanceState(outState);
       outState.putInt("curChoice", mCurCheckPosition);
   }

然后在您的 Fragment ActivityCreated()

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        // Restore last state for checked position.
        mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
    }
}

这些代码是从http://developer.android.com/reference/android/app/Fragment.html复制的,我建议您进一步阅读该页面。该示例正在恢复光标位置,但您可以使用它来恢复以前的用户答案(文本、整数、浮点数等)。

于 2012-10-16T08:10:55.247 回答