【发布时间】:2017-06-15 19:23:31
【问题描述】:
我正在为学校制作 Android 应用。
第一个活动是学生,其中包含一个由 3 个片段组成的 ViewPager。此活动的加载成本很高,因为它包含 3 个片段。
第一个片段包含游戏的 ListView
第二个片段包含一个卡通列表视图
3rd Fragment 包含一个 ListView 的测试(ListView 只包含测试的标题)。
现在在 Test 片段上单击测试(显示在列表视图中)一个新的 ShowTest Activity 已打开,它显示了完整的测试。
一切正常。
这是 TestFragment 中启动 ShowTest Activity 的代码
test.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent it = new Intent(getActivity(), ShowTest.class);
startActivity(it);
}
});
在 ShowTest Activity 中我只是调用了 finish();
public void onBackPressed() {
this.finish();
}
但在 ShowTest 中,当调用 onBackpressed() 时 Student 活动会重新创建(片段中的所有内容都会重新加载)。我不希望第二次创建此活动。因为它的加载成本很高。
这两个链接对我没有帮助
Open Info Activity without closing Main Activity
Android - Relaunching an activity without having to re-create it
我们将不胜感激。
谢谢(已编辑)
【问题讨论】:
-
这取决于您如何开始您的活动以及代码的相关部分在哪里。例如,如果您完成活动并进行下一个活动,然后从该活动返回到第一个活动,则它会被重新创建。如果你没有完成,通常活动会留在后台。然后重要的是所有代码在哪里......如果你初始化 onResume() 中的所有内容,那么所有内容都将再次完成。你一定要阅读活动生命周期:developer.android.com/guide/components/activities/…
-
没有办法保证这一点。如果 Android 检测到内存问题,它将关闭不在前台的活动,并在以后需要时重新创建它们。无法覆盖该行为(事实上,唯一的选择是始终打开它以进行测试)。
-
发布用于启动 ShowTestActivity 的代码、onBackPressed() 方法和任何其他相关代码。
-
@MateusGondim 我编辑了我的问题。
-
@Opiatefuchs 我没有完成学生活动,也没有初始化任何东西 onResume()
标签: android android-fragments android-intent