返回上一个活动(PreferenceManager)

时间:2013-11-20 23:04:10

标签: android android-activity return sharedpreferences

我想返回上一个活动,用户在关闭应用程序之前已关闭。我已经实现了这个方法来传达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();

    }

2 个答案:

答案 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,类似于您现在正在执行的操作。)