2016-06-15 1 views
3

문제 설명 :onBackPressed가 recreate()를 호출하지 않음

내 앱의 주요 활동 및 활동 설정이 앱에 있습니다. 각 설정 활동을 닫으면 기본 활동이 다시 생성됩니다.

메인 액티비티는 작업 표시 줄의 홈 버튼과 하드웨어 또는 팝업 표시 줄의 두 위치에서 finish()를 통해 닫을 수 있습니다 (앱 종료).

홈 버튼은 문제없이 작동하지만 처음에는 뒤로 버튼이 작동하지만 사용자가 설정 활동에 있고 종료 한 다음 주 활동으로 돌아 오면 onBackPressed() 기능이 더 이상 호출되지 않습니다.

레크 리 에이션을 삭제하면 홈 버튼처럼 뒤로 버튼이 제대로 작동합니다.

그래서 누군가가 왜 뒤로 버튼으로 엉망으로 만드는지 알고 있습니까?

감사합니다. 관련 코드의

부품 :

주요 활동 :

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 

     // Open Settings Activity 
     case R.id.menuSettings: 

      Intent intent = new Intent(this, SettingsActivity.class); 
      startActivityForResult(intent, REQUEST_SETTINGS); 

      return true; 

     // Close the App 
     case android.R.id.home: 

      finish(); 

      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

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

    if (resultCode != RESULT_OK) { 

     return; 
    } 

    switch (requestCode) { 

     case REQUEST_SETTINGS: 

      // Recreate activity 
      recreate(); 

      break; 
    } 
} 

// Close App on Back Button Click 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 

    finish(); 
} 

} 나는 해결책을 발견

+0

런처 모드에 대해 읽어야 할 수도 있습니다. https://developer.android.com/guide/topics/manifest/activity-element.html#lmode – Raghunandan

+0

재 작성된 코드는 무엇입니까? –

+0

나는 또한이 문제가있다. 그러나 모든 장치에있는 것은 아닙니다! 모든 에뮬레이터 (테스트 한)에서 올바르게 작동합니다. 물리적 장치가 아닙니다. 나는 무슨 일이 일어나고 있는지 이해할 수 없다. –

답변

0

...

그것은 일도 필요한 것 같다

recreate() 메서드를 호출하기 전에 완료 할 . 나는 onResume 안에 전화 했었고 onActivityResult 방법으로 전화했습니다.

그래서 저는 약간의 시간을 들여서 프로세스를 완료했습니다. (제 경우에는 100 밀리 초가 잘 처리되었습니다).

// Use this instead of calling recreate() directly. 
// This will call recreate() after 100 milliseconds, ASYNCHRONOUSLY: 
new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       recreate(); 
      } 
     }, 100); 
0

귀하의 마무리는 super.onBackPressed을하기 때문에 예상대로 작동하지 않을 수 있습니다() :

내 솔루션입니다.

마무리, 앱을 종료하지 않고 활동 만 완료합니다. 백 스택에 다른 활동이 있으면 해당 활동이 열립니다. 아마도 이것이 애플리케이션 로직에서 문제가되지는 않겠지 만, 명심하십시오.

기타 문제 : 문제가 재현되지 않아서 문제가 다른 곳에서 발생했을 수 있습니다. 나는 단지이 오래된 질문 실현

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       recreate(); 
      } 
     }); 
    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     finish(); 
    } 
} 

: 이것은 내가 당신의 문제를 재현하는 데 사용되는 코드입니다. 아직 가지고 있다면, MainActivity의 전체 코드를 제공하십시오. 우리가 다른 사람들을 도울 수 있도록 답변을 업데이트 할 것입니다.

관련 문제