我正在创建一个允许用户进行少量测试的应用。因此,TestActivity
(带有“开始测试”按钮),PreTestFragment
和TestFragment
(包含测试结果)构成PostTestFragment
。由于TestFragment
将是托管单个问题的片段,我希望它多次显示(比方说10)。
所有我想出的就是制作一个static
计数器,每当用户按下TestFragment
中的NEXT时该计数器就会递增,这使得他在计数器达到10后退出。
我是片段管理的新手,所以我觉得在执行NEXT按钮的onClick()
时可能会遇到一些错误。
static private int current_question;
public void onClick(View view) {
FragmentManager mng = getFragmentManager();
FragmentTransaction fgmTr = mng.beginTransaction();
Fragment currentFgm = mng.findFragmentByTag(FragmentTags.TEST_FTAG.toString());
Fragment nextFgm;
Bundle bundle = currentFgm.getArguments();
if (current_question < 10) { // test still running
current_question++;
nextFgm = mng.findFragmentByTag(FragmentTags.TEST_FTAG.toString());
// ...
// putting needed data in the bundle
// ...
if (nextFgm == null)
nextFgm = new TestFragment();
} else { // test is finished
nextFgm = mng.findFragmentByTag(FragmentTags.POST_FTAG.toString());
// ...
// putting different needed data in the bundle
// ...
if (nextFgm == null)
nextFgm = new PostTestFragment();
}
nextFgm.setArguments(bundle);
fgmTr.replace(R.id.test_body, nextFgm, FragmentTags.POST_FTAG.toString());
fgmTr.addToBackStack(null);
fgmTr.commit();
}
@Override
public void setArguments(Bundle args) {
super.setArguments(args);
// Should I use if-else here too to pass different data in the bundle?
}
第一次出现以下错误时运行并按“NEXT”:
java.lang.IllegalStateException:片段已激活
如何修复此代码?
答案 0 :(得分:0)
如果您的片段(nextFgm)已经创建,则无法调用setArguments。 看一看: https://developer.android.com/reference/android/app/Fragment.html#setArguments%28android.os.Bundle%29
答案 1 :(得分:0)
通常我是通过每次创建一个新片段的实例来实现的:
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, new myFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();