2013-11-20 4 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(); 

Вы Кастинг 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); 

Edit: Вы потенциально можете сделать логика немного умнее, что позволяет избавиться от строительства, если-то еще. Это может быть особенно полезно, если позже вы планируете добавлять дополнительные действия.

Идея состоит в том, чтобы сохранить имя класса активности, которое затем можно использовать для построения правильного намерения. Что-то вроде этого (непроверенные):

Сохранить:

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 мог бы управлять активным фрагментом при выходе (через сохраненный экземпляр Bundle и/или SharedPreference, аналогичный тому, что вы сейчас делаете.)

+0

Работаю, но спасибо в любом случае –

Смежные вопросы