【问题标题】:Return to the last activity (PreferenceManager)返回上一个活动(PreferenceManager)
【发布时间】:2013-12-05 05:12:03
【问题描述】:

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

    }

【问题讨论】:

    标签: android android-activity return sharedpreferences


    【解决方案1】:

    在没有定义“有什么问题”是什么意思的情况下,我冒险猜测一下。

    看看下面的sn-p代码:

    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);
    }
    

    可能需要进行一些调整以避免一个活动递归启动自身的潜在循环,但这个想法应该很清楚。

    【讨论】:

    • 不起作用我留下空白页,好像它重复相同的操作以返回菜单(也许)
    【解决方案2】:

    您的每个活动是否通过完成活动来处理“返回”按钮?您应该考虑转移到基于片段的活动,而不是像这样的多个活动。然后,您的主要 FragmentActivity 可以管理退出时哪个是活动 Fragment(通过保存的实例 Bundle 和/或 SharedPreference,类似于您现在正在做的事情。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多