我想不出一个更好的问题标题:(
在我的应用程序中,我需要一个提问者,有10个问题,每次1个问题。
我做的是:
有1个活动说MainActivity,在其onCreate()中以编程方式添加片段,表示Frag_1
在Frag_1中,我有一个接口onButtonClickedListener
,其方法为onClicked
,可以回复“活动”以了解点击了哪个选项等。
在我的MainActivity中实现了onClicked此接口的方法,并在该方法中将片段更改为Frag_2(第二个问题),依此类推。
问题是:
我最终获得了10个片段,而我的MainActivity实现了10个接口1每个片段。将来我可能有30-40个问题。
修改
每个问题都不相似。问题的答案选项是EditText / Spinner / RadioButtons等..所以我不能使用相同的片段,只需更改问题和答案选项文本。
是否有更好,更有效的方法来解决这个问题
谢谢
答案 0 :(得分:1)
你快到了。
为MainActivity提供更广泛/通用的界面来实现。
也许类似于public void fragClickCallback(int fragId, Bundle data);
通过这种方式实现,您可以让switch() case
知道哪个问题来自哪个,你的包可以为不同类型的答案打包不同的键(int表示radion按钮/微调器,字符串表示打开的答案等)
并且确保在每个片段事务上使用.replace(...)
来删除片段。
修改强>
此外,有一些聪明的方法可以构建你的片段,而不必创建数十亿个片段。可以有多少种不同类型的问题?让我们算一下:所以我们有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复制的。我建议您进一步阅读该页面。 该示例是恢复光标位置,但您可以使用它来恢复以前的用户答案(文本,整数,浮点数等)。