您快到了。为 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复制的,我建议您进一步阅读该页面。该示例正在恢复光标位置,但您可以使用它来恢复以前的用户答案(文本、整数、浮点数等)。