2014-11-17 3 views
0

으로 다시 시작하기 때문에 활동에 대한 뒤로 버튼을 설정했습니다. 메뉴 화면으로 돌아갑니다. 뒤로 버튼을 눌러 원래 활동으로 되돌리려합니다. 그러나 이미 가지고있는 코드는 이미 만들어진 인스턴스로 돌아가는 대신 메뉴 항목을 누르면 새로운 인스턴스가 열립니다. 전화의 실제 뒤로 버튼 (OnDestroy를 호출하는 버튼)을 누르면 동일한 모든 활동의 여러 인스턴스가 닫힙니다. 저장 한 변수를 가진 원래의 생성 된 변수가 여전히 존재한다는 것을 확인할 때도 볼 수 있습니다. 코드를 보여 드리죠.이미 생성 된 활동으로 돌아가거나

public boolean onOptionsItemSelected(MenuItem item){ 
    Intent myIntent = new Intent(getApplicationContext(), Tools.class); 
    startActivityForResult(myIntent, 0); 
    return true; 

이것은 원래 활동의 작업 표시 줄 뒤로 가기 버튼 코드입니다. 도구 클래스로 돌아갑니다. 도구 클래스는 내가 만드는 EMS 앱의 도구에 연결하는 단추가있는 활동입니다. 아이디어는 원래 활동에 시간을 기록하고, 다시 돌아가서 전화 정보로 이동하여 시간이 명시되고 전역 변수에서 저장되는 것이 었습니다. 다시 도구로 돌아가서 내 바이탈 로거를 다시 클릭하면 왼쪽으로 돌아갈 것입니다. 아니. 그냥 버튼과 떨어져 수행 할 수 있습니다, 그냥 반격에 새로운 인스턴스를 열 수

 vitals = (Button) findViewById(R.id.vitals); 
    vitals.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      try{ 
      Class goVitals = Class.forName("com.vexos.emspal.Vitals"); 
      Intent goIntent = new Intent(Tools.this, goVitals); 
      startActivity(goIntent); 
      }catch(ClassNotFoundException e){ 
       e.printStackTrace(); 
      } 
      finish(); 
     } 

는 지금은 도구 화면을 파괴하기 위해이 버튼을 사용하여 마무리를 호출합니다. 여기서 어딘가에, 나는 "com.vexos.emspal.Vitals"의 이전에 생성 된 인스턴스로 돌아 가기 위해 if 문과 같은 것을 가지고 있어야합니다. 그러나 다시 클릭하면 새 인스턴스가 만들어지며, 다른 인스턴스는 백그라운드에서 멈추어 서 다시 액세스합니다. 이 onClick 메서드가 이미 실행중인 인스턴스가 있는지 확인한 다음 onResume을 확인하려면 어떻게해야합니까?

+0

는 당신이 더 문제를 설명하고 간단한 방법으로 주시겠습니까? 문제가 정확히 무엇입니까? – mobilepotato7

+0

Ok이 onClick 메서드는 새로운 활동을 엽니 다. 해당 액티비티에는 onClick 메서드가있는 곳으로 돌아가는 뒤로 버튼이 있습니다. onClick 메서드를 클릭하면 처음에 연 작업으로 돌아가서 해당 작업의 새 인스턴스를 만들지 않아야합니다. – jham

+0

안드로이드처럼 나에게 들리는 소리가 정확히 무엇을해야만하는지 잘 알고 있습니다. 이전 활동의 데이터가 필요한 경우 공유 환경 설정에 데이터를 쓰고 활동 시작시로드 (사용 가능한 경우)하면 원래 활동이 환상적입니다. 또한 활동 라이프 사이클을 읽을 수도 있습니다. – LokiSinclair

답변

0

그래서 내가 이해, 당신은 :

활동 A는 B가 B 자체를 완료 활동
활동을 시작 활동 B
활동을 시작합니다. 이 옳다면

, 당신은 이제 클래스 A의 두 가지 활동,

는이 문제를 해결하려면, 활동 B에서 활동를 시작하지 않는 당신이 활동 B. 시작 이미 시작된 하나와 하나가 하지만, 단지 활동 B. 을 완료 그래서되어야합니다 : 당신이 여기 내게 준 주석의 답변에 따라

vitals = (Button) findViewById(R.id.vitals); 
vitals.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     finish(); 
    } 
+0

활동 A가 활동을 엽니 다. B 활동 B는 활동 A로 돌아가서 다른 도구에 액세스 할 수 있습니다. 활동 B에서 활동 A를 클릭하여 다시 열면 새 인스턴스가 열리고 첫 번째 인스턴스는 표시되지 않습니다. 그러나 첫 번째 인스턴스는 여전히 두 번째 인스턴스 바로 아래에 있습니다. 혼란스럽고 실제 앱과 그 앱이 무엇을하고 있는지 보여주기를 바랍니다. – jham

0

가능한 솔루션 중 하나입니다. 단추를 다시 클릭 한 후 두 번째 활동이 동일한 상태를 유지하게 할 수 있습니다. 따라서 데이터를 저장하고 복원해야합니다.

saveInstanceState 번들에 필요한 모든 데이터를 작업이 중지 될 때 호출되는 onSaveInstanceState에 저장합니다. 그런 다음 onRestoreInstanceState 또는 onCreate에서 데이터를 다시 가져옵니다.

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Save the user's current game state 
    savedInstanceState.putInt(STATE_SCORE, mCurrentScore); 
    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); 

    // Always call the superclass so it can save the view hierarchy state 
    super.onSaveInstanceState(savedInstanceState); 
} 

그리고 데이터를 복구 할 수 :

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); // Always call the superclass first 

    // Check whether we're recreating a previously destroyed instance 
    if (savedInstanceState != null) { 
     // Restore value of members from saved state 
     mCurrentScore = savedInstanceState.getInt(STATE_SCORE); 
     mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); 
    } else { 
     // Probably initialize members with default values for a new instance 
    } 
    ... 
} 

자세한 내용 여기를 이동하십시오 : http://developer.android.com/training/basics/activity-lifecycle/recreating.html

+0

변수가 이미 onSaveInstanceState에 저장됩니다. 문제는 내가 제공 한 onClick 메서드가 다시 시작하지 않는다는 것인데, 실제로 그것의 새로운 인스턴스를 연다. 새로운 인스턴스를 파기하기 위해 전화기의 뒤로 버튼을 눌렀을 때 원래의 인스턴스가 여전히 존재합니다. 변수도 그대로 남아 있습니다. 새 인스턴스를 열지 않고 원래 인스턴스를 다시 시작하려면 onCLick 메서드가 필요합니다. – jham

+0

그냥 다시 시작하지 마십시오. finish()를 호출하면 파괴되지만 값은 유지됩니다. – mobilepotato7

+0

좋아, 내가 알았을 것 같아. 내가해야 할 일은 finish()를 추가하는 것이다. 뒤로 버튼으로 생각합니다. 인스턴스를 파괴하지 않기 때문에 이것을 시도하겠습니다. - 당신이 내 마음을 읽어 편집 – jham

관련 문제