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

당신은 IntentEditor을 캐스팅하고 있습니다 :

는 다음 코드에서보세요. 그것은 두 클래스 사이에 관계가 없기 때문에 거의 이해가되지 않습니다. 따라서 어딘가에 ClassCastException이 표시됩니다.

대신에, 당신은 캐스팅을 없애 및 문자열을 저장하기 위해 Editor 클래스가 제공하는 올바른 방법을 사용한다 : 문제의 절반입니다

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

합니다. 당신은 IntentString 캐스팅하려는

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

: 당신은 환경 설정에서 값을 다시 읽을 때 비슷한 일이 있습니다. 다시 말하지만, 이것은 위에서 언급 한 예외를 줄 것입니다. 캐스트를 제거하고 문자열을 검색하는 올바른 방법을 사용하십시오.

String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("sent", null); 

편집 : 당신은 잠재적으로 논리가 좀 더 똑똑하게 당신이 경우 - 다른 구조를 제거 할 수 있습니다. 나중에 더 많은 활동을 추가 할 계획이라면 특히 유용 할 수 있습니다.

아이디어는 활동의 클래스 이름을 저장하는 것이며,이를 통해 올바른 의도를 구성 할 수 있습니다. 이런 식으로 뭔가 (테스트되지 않은) :

저장 :

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

은 아마 하나 개의 활동이 자신을 재귀 적으로 실행 경우 잠재적 인 사이클을 피하기 위해 조정의 조금 필요하지만 아이디어는 :

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

복원 명확해야합니다.

+0

동일한 작업을 반복하는 것처럼 빈 페이지를 남겨 둡니다. 메뉴로 돌아 가기 (아마) –

+0

다른 사람의 내용을 지우고 덕분에 친구 –

0

활동이 끝나면 각 활동이 '뒤로'버튼을 처리합니까? 이와 같은 여러 활동 대신 단편 기반 활동으로 이동하는 것을 고려해야합니다.그런 다음 주요 FragmentActivity는 현재 저장된 항목 번들 및/또는 SharedPreference를 통해 나가면 활성 조각이었던 항목을 관리 할 수 ​​있습니다.

+0

이 작동하지만 어쨌든 고마워요. –

관련 문제