アップキャレットが表示されていますが、クリックしても何も起こりません。家に帰るように指示して、どのアクティビティをホームにするかをどこで設定できますか?
3 に答える
次の行が必要です。
getActionBar().setDisplayHomeAsUpEnabled(true);
それを入れてくださいonCreate()
。
これでクリック可能になります。クリックイベントを処理する必要があります。これはオーバーライドによって行われますonOptionsItemSelected()
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
default:
return super.onOptionsItemSelected(item);
}
}
NavUtils (Activity を作成するときに ADT プラグインで使用されているのを見たことがあります) を使用する場合は、次のように実装を変更して置き換えることができます。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
忘れないで
import android.support.v4.app.NavUtils;
また、これをアクティビティ ノードに追加することもできます。
<activity
android:name=".SomeActivity"
android:label="@string/activity_label" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.mypackage.MainActivity" />
</activity>
通常、NavUtils の方が優れたアプローチです。詳細については、公式の Androidガイドラインを参照してください。
あなたonCreate
が持っている:
getActionBar().setDisplayHomeAsUpEnabled(true);
そして、次を使用します。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
以下のコメントに対処するために更新されました。これは、私の元の回答がすべてのケースで正しくないことを正しく指摘しています。「ホーム/アップ」ボタンは、それぞれホーム アクティビティまたは親アクティビティに移動することになっています。ActionBar
資料より――
デフォルトでは、アプリケーション アイコンは左側のアクション バーに表示されます。必要に応じて、アイコンをアクション アイテムとして動作させることができます。アイコンに対するユーザー アクションに応答して、アプリケーションは次の 2 つのいずれかを実行する必要があります。
Go to the application "home" activity, or Navigate "up" the application's structural hierarchy
「ホーム」の実装は簡単です。アプリのホーム アクティビティ (通常はメインの起動アクティビティ) に対してインテントを起動し、存在する場合は既存のインスタンスへのバックスタックをクリアします。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
「up」は似ていますが、使用する必要があります
getActionBar().setDisplayHomeAsUpEnabled(true);
アイコンをonCreate
「ホーム」ではなく「アップ」として表示し、親アクティビティのインスタンスを起動します。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent parentActivityIntent = new Intent(this, MyParentActivity.class);
parentActivityIntent.addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(parentActivityIntent);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
どちらの場合も、アプリケーションの外部から起動できるアクティビティについてFLAG_ACTIVITY_NEW_TASK
は、呼び出し元のタスクではなく新しいタスクに起動を追加する必要があります。
「アップ」はActivity
、別のアプリから起動できる場合、さらに複雑になる可能性があり、アプリケーションがルートに戻るためのバック スタックを構築する必要があります。詳細については、このガイドを参照してください。
以下に示す私の最初の回答は、ホーム/アップボタンを「戻る」として扱うため、ガイドでは悪い形式と見なされます。このアクティビティを呼び出したアクティビティに移動しますが、これは必ずしもホームまたは親ではありません。特定のアクティビティは常にその親によって起動されるため、アクティビティの厳密なツリー階層を持つアプリでは「上」としてうまく機能します。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}