我想返回上一个活动,用户在关闭应用程序之前已关闭。我已经实现了这个方法来传达3个活动,但在我的代码中有一些错误。你有什么想法解决这个问题吗?
MenuActivity(启动应用时打开)
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String lastActivity = ((Intent) PreferenceManager.getDefaultSharedPreferences(this)).getStringExtra("sent");
if (lastActivity != null && lastActivity.equals("activity_2")){
{
Intent myIntentActivity1 = new Intent(menu.this,activity_2.class);
startActivity(myIntentActivity1);
}
}
if (lastActivity != null && lastActivity.equals("activity_3")){
{
Intent myIntentActivity2 = new Intent(menu.this,activity_3.class);
startActivity(myIntentActivity2);
}
}
else {
Intent myIntentActivity3 = new Intent(menu.this,menu.class);
startActivity(myIntentActivity3);
}
活动2
//一些代码
@Override
public void onResume(){
super.onResume();
Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
((Intent) e).putExtra("sent", "activity_2");
e.commit();
}
活动3
//一些代码
@Override
public void onResume(){
super.onResume();
Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
((Intent) e).putExtra("sent", "activity_3");
e.commit();
}
答案 0 :(得分:0)
如果没有定义“出错”意味着什么,我就会猜测。
查看以下代码段:
Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
((Intent) e).putExtra("sent", "activity_2");
e.commit();
您正在向Editor
投放Intent
。这没什么意义,因为这两个类之间没有任何关系。因此,您可能会在某处看到ClassCastException
。
相反,您应该摆脱强制转换并使用Editor
类提供的正确方法来保存字符串:
Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
e.putString("sent", "activity_2");
e.commit();
这是问题的一半。当您从首选项中读取值时,存在类似的值:
String lastActivity = ((Intent) PreferenceManager.getDefaultSharedPreferences(this)).getStringExtra("sent");
您正在尝试将String
投射到Intent
。同样,这将给你上述例外。摆脱演员并使用正确的方法来检索字符串。
String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("sent", null);
编辑:你可以使逻辑变得更聪明,让你摆脱if-else结构。如果您计划稍后再添加更多活动,这可能会特别有用。
这个想法是存储活动的类名,然后您可以利用它来构建正确的意图。像这样(未经测试):
保存:
Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
e.putString("sent", getClass().getName());
e.commit();
还原:
String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("sent", null);
if (lastActivity != null) {
Class<?> cls = Class.forName(lastActivity);
Intent myIntentActivity = new Intent(menu.this, cls);
startActivity(myIntentActivity);
}
可能需要进行一些调整以避免一个活动递归启动的潜在周期,但这个想法应该是明确的。
答案 1 :(得分:0)
您的每项活动是否通过完成活动来处理“后退”按钮?您应该考虑转移到基于Fragment的活动,而不是像这样的多个活动。然后,您的主要FragmentActivity可以管理退出时的活动Fragment(通过保存的实例Bundle和/或SharedPreference,类似于您现在正在执行的操作。)