2013-11-20 45 views
0

我想返回上一个活动,用户在关闭应用程序之前已关闭。我已经实现了这种方法来传达3个活动,但在我的代码中有错误。你有什么想法来解决这个问题吗?返回上一个活动(PreferenceManager)

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

没有定义什么“错误”的意思,我会冒险猜测。

看一看下面的代码片段:

Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit(); 
((Intent) e).putExtra("sent", "activity_2"); 
e.commit(); 

你投EditorIntent。这没什么意义,因为两个类别之间没有关系。因此,您可能在某处看到ClassCastException

在代替,你应该摆脱铸造和使用由Editor类提供了正确的方法来保存字符串:

Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit(); 
e.putString("sent", "activity_2"); 
e.commit(); 

这是问题的一半的。

String lastActivity = ((Intent) PreferenceManager.getDefaultSharedPreferences(this)).getStringExtra("sent"); 

你试图施放StringIntent:当你从首读值回类似的一个存在。再一次,这会给你前面提到的例外。摆脱强制转换并使用正确的方法检索字符串。

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

可能需要调整,以避免潜在的循环,其中一个活动递归地推出自己的一点点,但这个想法应该清楚。

+0

我已经离开了空白页,就好像它重复同样的动作不起作用返回菜单(也许) –

+0

我删除的其他内容和现在的作品感谢朋友 –

0

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

+0

的工作,但我还是谢谢你 –