別のアクティビティを開始するアクティビティがあります。
Android Manifest?そのうちの?
Android:parentActivityName="com.example.myfirstapp.MainActivity"
docs に従って->セクションAndroid:parentActivityName
:
システムはこの属性を読み取り、ユーザーがアクションバーの上ボタンを押したときに開始するアクティビティを決定します。システムはこの情報を使用して、TaskStackBuilderでアクティビティのバックスタックを合成することもできます。
したがって、指定する必要があるのは、(戻るボタンによるナビゲーションではなく)アップナビゲーションまたは TaskStackBuilder を使用する場合のみです。それ以外の場合は必要ありません。
アップナビゲーションについてはこちらをチェックしてください: http://developer.Android.com/design/patterns/navigation.html
上向きのナビゲーションまたはバックスタック合成が必要な場合は定義する必要がありますが、属性Android:parentActivityName
はAPIレベル16で導入されたことに注意してください。
以前のリリースでは、親のアクティビティ情報は、子の<meta-data>
タグ内で宣言されている<activity>
タグ内で定義された属性からアクセスされます。
例:
<activity
Android:name=".DetailActivity"
Android:parentActivityName=".MainActivity">
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value=".MainActivity"/>
</activity>
<meta-data>
タグ内で、Android:name
属性をAndroid.support.PARENT_ACTIVITY
に設定し、Android:value
属性を親アクティビティクラス名(つまり、Android:parentActivityName
に割り当てられたものと同じクラス名)に設定します。
APIレベルが既知でない限り、<meta-data>
とインライン仕様の両方が推奨されます。
親アクティビティの指定の詳細については、次を参照してください: https://developer.Android.com/training/implementing-navigation/ancestral.html#SpecifyParent
さらに、メインのAndroid:launchMode
タグ内に<activity>
属性を定義して、上方向のナビゲーションの望ましい動作を設定することを検討してください: https://developer.Android.com/guide/topics/manifest/activity-element.html#lmode
必ずしも_AndroidManifest.xml
_でparentActivity
を定義する必要はありません。以下のコードを使用して、戻るナビゲーションを有効にできます。
_ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
_
そしてこれを実装します:
_public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == Android.R.id.home) {
onBackPressed();
}
return super.onOptionsItemSelected(item);
}
_
ただし、マニフェストでparentActivity
を定義すると、システムはこの属性を読み取って、ユーザーがアクションバーで[上へ]ボタンを押したときに開始するアクティビティを決定します。つまり、parentAcivity
の新しいインスタンスを作成します。つまり、親アクティビティのonCreate()
を呼び出します。
このようにmanifest
で親アクティビティを指定する必要はありません
_Android:parentActivityName="com.example.myfirstapp.MainActivity"
_
navigationUp
の場合は、setDisplayHomeAsUpEnabled(true);
およびonSupportNavigateUp()
メソッドも使用できます これを見てください
インテントまたはランチャーを介して呼び出すマニフェスト内のすべてのアクティビティを指定する必要があります。これにより、システムはそれを見つけることができます。したがって、アプリを開始できるランチャーとして1つのアクティビティをマークし、アプリで呼び出す他のすべてのアクティビティを登録します。
このようなBaseActivityがある場合:
public class BaseActivity extends Activity{}
public class MyActivity extends BaseActivity{}
myActivityを登録するだけで済みます。BaseActivityはシステムではなくユーザーによって呼び出されるためです。