2013-12-20 6 views
1

주요 활동은 클라이언트의 데이터를 계속 수신하고 있습니다. 정보, 설정 및 홈의 세 가지 메뉴 항목이 오른쪽 상단에 있습니다. 이 세 개의 메뉴 탭은 홈 화면 (MainActivity 클래스), 정보 페이지 및 설정 페이지의 세 화면 모두에서 볼 수 있습니다. 홈 메뉴 항목의 클릭에 , 나는 내가 어떤 화면에서 홈 메뉴 항목을 클릭하면메인 활동으로 돌아 가기를 클릭하십시오.

case R.id.menu_Home: 
     Intent intent = new Intent(this, MainActivity.class); 
     startActivity(intent); 

내 질문에, 나는 내 활동을 다시 시작하고 있습니다 다음 코드를 작성했습니다? 그렇다면 다시 시작하지 않고 홈 메뉴 항목을 클릭하면 기본 활동 화면으로 이동하는 방법에 대한 지침을 제공하십시오. 활동을 반복해서 다시 시작하여 데이터가 손실 될 여유가 없습니다.

+0

"설정"및 "정보"도 활동입니까? –

답변

1

OS에서 언제든지 죽일 수 있으므로 활동을 데이터 소스로 절대로 릴레이해서는 안됩니다. SharedPreferences, LiteSQL 또는 기타 활동 상태 저장을 위해 onResume 메소드 내에서이 데이터를 사용하여 다시 만들 수 있습니다.

+0

일부 코드 스 니펫을 제공해 주시겠습니까? – Ravneet

0

현재 활동이 사용자의 mainActivity인지 확인한 다음 인 텐트를 시작하십시오.

case R.id.menu_Home: 
if(!(this.getClass().getSimpleName()==MainActivity)){ 
Intent intent = new Intent(this, MainActivity.class); 
     startActivity(intent); 
} 
1

당신이 옆 MainActivity에서하고있는, 당신이 할 수 있습니다 :

Intent intent = new Intent(this, AboutPage.class); 
startActivityForResult(intent, 10); 

Intent intent = new Intent(this, SettingsPage.class); 
startActivityForResult(intent, 20); 
:

  1. MainActivity에서와 다른 활동을 시작

  2. 각각 2 개 라는 활동을 수행하십시오

    case R.id.menu_Home: 
        setResult(SOME_NUMBER_FROM_ABOUT); 
        finish(); 
    

    또는 다시 MainActivity에 당신을 데려 갈 것이다

    case R.id.menu_Home: 
        setResult(SOME_NUMBER_FROM_SETTINGS); 
        finish(); 
    

    . 당신의 MainActivity에서

  3. 무시하여 onActivityResult() :

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch(requestCode) { 
     case 10: 
      //handle returning from About page 
      //you can also check for resultCode 
      //if (resultCode == SOME_NUMBER_FROM_ABOUT) { 
      // some code here 
      //} 
      break; 

     case 20: 
      //handle returning from Settings page 
      break;  
    } 
그냥 기억이 당신의 클래스 이름을 조정하고, SOME_NUMBER_FROM_ABOUT 당신은 당신이 원하는 무엇이든 선택할 수있는 int입니다.

1

예, 기본 활동의 새 인스턴스를 다시 시작하고 만듭니다. 이 도움이 될 수 있습니다 주요 활동이 이미로드되어 실행되는 홈 옵션 메뉴에서 선택 될 때 http://developer.android.com/training/basics/activity-lifecycle/index.html

주요 활동에서, 당신은 아무것도 할 필요가 없습니다. 현재 코드는 활동의 새 인스턴스를 만들고 시작합니다.

//in MainActivity 
case R.id.menu_Home: 
    break; 

주 활동의 메뉴에서 홈 옵션을 삭제하는 것도 고려해야합니다. 이것은 홈 옵션이없는 다른 메뉴를 생성하고 주 활동에서 팽창 할 경우 수행 할 수 있습니다.

다른 모든 활동에서 기존 코드가 제대로 작동해야합니다. 그러나 주 활동에있을 때를 제외하고 새로운 활동을로드하기 전에 finish() 각 활동을 사용하면 활동 스택은 주 활동 및 현재 실행중인 활동으로 만 구성됩니다. 이 경우 다음 코드를 사용하여 다른 활동의 주 활동으로 돌아갈 수 있습니다. 이렇게하면 주 활동이 계속 재개되지만 재 작성하지 않아도됩니다. 이 같은

//In other activities  
case R.id.menu_Home: 
    finish(); 
0

시도 뭔가 :

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menu_Home: 
     if (!(this instanceof MainActivity)) { 
      finish(); 
     } 

     break; 
    case R.id.settings: 
     if (!(this instanceof Settings)) { 
      if(!(this instanceof MainActivity)) 
          finish(); 
       Intent intent = new Intent(this, Settings.class); 
      startActivity(intent); 
     } 

     break; 

    default: 
     break; 
    } 

이 흐름은 다음과 같습니다

else 

단지 완료

선택은 MainActivity와 mainActivity에있는
If 

는 아무것도하지 않고 이제까지 무엇이 acti 너 온거야. 선택

If 

당신이 설정 활동 및 설정에있는 아무것도를하지 않는다

else if 

당신이 주요 활동에 있고 단지 당신이 이제까지 설정 활동

else 

마무리를 시작하고 설정을 시작합니다 .

Do same with others 

이 플로우는 결코 다시 만들지 않는 주요 활동에만 집중하도록합니다. 다음 활동으로 이동하면 언제든지 그 활동을 끝낼 수 있습니다.

관련 문제