活动A开始活动B.在活动B中,我有这个方法:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
// This ID represents the Home or Up button. In the case of this
// activity, the Up button is shown. Use NavUtils to allow users
// to navigate up one level in the application structure. For
// more details, see the Navigation pattern on Android Design:
//
// http://developer.android.com/design/patterns/navigation.html#up-vs-back
//
NavUtils.navigateUpTo(this, new Intent(this,
ArticleListActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
当我按下主页按钮时,它会将我带到活动A。但是,onCreate再次被调用。我不想要这种行为。
我猜测它,因为此实现使用新的Intent到导航堆栈中的上一个项目。这只是我在创建双窗格项目时从Eclipse获得的代码。我查看了堆栈溢出,虽然似乎使用Intent返回导致此行为,但我不明白为什么Google会在默认模板中提供此行为。
我应该如何以不同的方式进行此调用,以便在返回活动A时不再调用onCreate?
答案 0 :(得分:8)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
刚刚完成当前活动,它将带您进行之前的活动 如果您之前的活动是活动A,那么只需使用finish();方法而不是创建意图对象
答案 1 :(得分:3)
正如@Rajesh所指出,你需要调用 onBackPressed()。
您的代码会检测到按下主页按钮并创建一个新的 ArticleListActivity 类。但是,您不希望创建一个新类,只想返回已创建的类/活动。所以请改用 onBackPressed()。
答案 2 :(得分:0)
您可以尝试在清单中设置启动模式,因为父活动可以从堆栈中弹出。
firstpart, secondpart = s[:len(s)/2], s[len(s)/2:]
答案 3 :(得分:0)
通过这种方式,不会再次调用onCreate()。
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}