0

나는 몇 가지 활동으로 앱을 가지고 있습니다. 지금까지 나는 그것들 사이에 "하드 코드 된"계층 구조를 가지고 있었기 때문에 android : parentActivityName을 명시 적으로 각각의 (그러나 런처 활동으로) 설정했다. 그러나 이제는 하나 이상의 활동 메뉴에 설정을 추가했습니다.AppCompat의 "뒤로/위로"버튼을 "뒤로"시스템 버튼으로 사용하는 방법이 있습니까?

작업 표시 줄의 "뒤로"화살표를 시스템의 뒤로 버튼 (화면 하단)으로 사용하는 방법이 있습니까? 즉, parentActivityName이 설정되어 있으면 부모 액티비티로 돌아가고, 그렇지 않으면 액티비티를 닫고 이전 액티비티로 돌아갑니다.

이것은 시도했지만 작동하지 않습니다. actionBar.setDisplayHomeAsUpEnabled (true)를 호출하지 않으면 작업 표시 줄에 "뒤로"화살표가 없지만 Manifest에 parentActivityName이 설정되지 않은 활동에서이 화살표를 호출하면 예외가 발생합니다. 나는 화살을 클릭한다.

abstract public class BaseActivity extends ActionBarActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(getLayoutResourceId()); 

     final ActionBar actionBar = getSupportActionBar(); 
     if (null != actionBar) { 
      actionBar.setDisplayHomeAsUpEnabled(getDisplayHomeAsUpEnabled()); 
     } 
    } 

    protected abstract int getLayoutResourceId(); 
    abstract protected boolean getDisplayHomeAsUpEnabled(); 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     final int id = item.getItemId(); 
     if (id == android.R.id.home) { 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
     } 
    } 
} 

답변

3

시도 :

if (id == android.R.id.home) { 
     onBackPressed(); 
     return true; 
    } 

위의 코드는 호출됩니다 onBackPressed, 당신이 그것을 오버라이드 경우 매우주의해야합니다. 그렇지 않으면 "뒤로"시스템 버튼과 같습니다.

+0

안드로이드 : parentActivityName이 Manifest에 설정되어 있지 않은 경우 화살표를 표시하는 데 여전히 도움이되지 않습니다. – Gavriel

+0

@Gavriel 위의 코드와 함께'android : parentActivity'를 사용하지 말고'setDisplayHomeAsUpEnabled (true); '를 사용하십시오. 그 시스템의 버튼처럼 동작합니다. –

+0

OK, 실제로 작동합니다. 이제는 모든 활동에 대해 actionBar.setDisplayHomeAsUpEnabled (true)를 호출 할 수 있습니다. – Gavriel

관련 문제