ActionBarの戻るボタンを有効にするには、明らかにアクティビティにActionBarが必要です。これは、使用しているテーマによって設定されます。でアクティビティのテーマを設定できますAndroidManfiest.xml
。たとえば@android:style/Theme.NoTitleBar
テーマを使用している場合、ActionBarはありません。この場合、への呼び出しgetActionBar()
はnullを返します。最初にActionBarがあることを確認してください。
次のステップはandroid:parentActivityName
、戻るボタンを押した場合にナビゲートするアクティビティにを設定することです。これも行う必要がありAndroidManifest.xml
ます。
これonCreate
で、「子」アクティビティのメソッドで戻るボタンを有効にすることができます。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
次に、戻るボタンのロジックを実装する必要があります。onOptionsItemSelected
「子」アクティビティのメソッドをオーバーライドし、戻るボタンのIDを確認するだけですandroid.R.id.home
。
今、あなたは、メソッドを起動することができますNavUtils.navigateUpFromSameTask(this);
しかし、あなたが指定しているいけない場合android:parentActivityName
、あなたにはAndroidManifest.xml
このアプリがクラッシュします。
「何か」を忘れたことを思い出させるので、これはあなたが望むものです。したがって、これを防止したい場合は、getParentActivityIntent()
メソッドを使用してアクティビティに親があるかどうかを確認できます。これがnullを返す場合は、親を指定していません。
この場合onBackPressed()
、ユーザーがデバイスの戻るボタンを押すのと基本的に同じように機能するメソッドを起動できます。アプリをクラッシュさせない優れた実装は次のとおりです。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (getParentActivityIntent() == null) {
Log.i(TAG, "You have forgotten to specify the parentActivityName in the AndroidManifest!");
onBackPressed();
} else {
NavUtils.navigateUpFromSameTask(this);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
ユーザーが見ているアニメーションが間で異なることに注意してくださいNavUtils.navigateUpFromSameTask(this);
とonBackPressed()
。
どの道を進むかはあなた次第ですが、特にすべてのアクティビティに基本クラスを使用する場合は、解決策が役立つと思いました。
getActionBar().setDisplayHomeAsUpEnabled(true);
onCreate内とswitch (item.getItemId()) {case android.R.id.home: onBackPressed();break;}
ではonOptionsItemSelected
?ServicesViewActivityの両方