前のページ/アクティビティまたはメイン ページ (最初のオープニング) に移動するためBack button
にを表示しようとしています。Action bar
そして、私はそれをすることができません。
私のコード。
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
コードは にありonCreate
ます。
前のページ/アクティビティまたはメイン ページ (最初のオープニング) に移動するためBack button
にを表示しようとしています。Action bar
そして、私はそれをすることができません。
私のコード。
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
コードは にありonCreate
ます。
まあ、これは戻るボタンを表示するための簡単なものです
actionBar.setDisplayHomeAsUpEnabled(true);
そして、onOptionsItemSelected で back イベントをカスタマイズできます。
case android.R.id.home:
this.finish();
return true;
onSupportNavigateUp()
これが最善かつ最も簡単な方法だと思います。以下の手順を確認してください。ステップ 1 は必須で、ステップ 2 には代替手段があります。
ステップ 1 戻るボタンを表示する:onCreate()
メソッドにこの行を追加して、戻るボタンを表示します。
assert getSupportActionBar() != null; //null check
getSupportActionBar().setDisplayHomeAsUpEnabled(true); //show back button
ステップ 2 バック クリックの実装:このメソッドをオーバーライドします。
@Override
public boolean onSupportNavigateUp() {
finish();
return true;
}
以上で完了です
または ステップ 2 の代替方法: 次のように、マニフェスト ファイルのアクティビティにメタを追加できます。
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="MainActivity" />
編集:AppCompat
アクティビティを使用していない場合support
は、単語を使用しないでください。使用できます
getActionBar().setDisplayHomeAsUpEnabled(true); // In `OnCreate();`
// And override this method
@Override
public boolean onNavigateUp() {
finish();
return true;
}
@atariguy さん、コメントありがとうございます。
で魔法が起こりonOptionsItemSelected
ます。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
公式の解決策
これら 2 つのコード スニペットを SubActivity に追加します
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
メタデータとparentActivityをマニフェストに追加して、下位SDKをサポートします。
<application ... >
...
<!-- The main/home activity (it has no parent activity) -->
<activity
android:name="com.example.myfirstapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
android:name="com.example.myfirstapp.SubActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName="com.example.myfirstapp.MainActivity" >
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myfirstapp.MainActivity" />
</activity>
</application>
ここを参照してください: http://developer.android.com/training/implementing-navigation/ancestral.html
これらの行を onCreate() に追加します
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
および onOptionItemSelected で
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
//Write your logic here
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
これがあなたを助けることを願っています..!
onCreate
メソッドに次を追加します。
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
AndroidManifest.xml
親アクティビティ (アクション バーの [戻る] ボタンが押されたときに呼び出されるアクティビティ) で定義する場合:
<activity>
マニフェストの定義に、次の行を追加します。
android:parentActivityName="com.example.activities.MyParentActivity"
上記が多くの役立つ解決策であることは知っていますが、今回この記事を読みました (現在の Android Studio 2.1.2 with SDK 23) 上記のいくつかの方法が機能しません。
以下は、サブアクティビティの私のソリューションは MapsActivity です
まず、parentActivity を追加する必要があります
AndroidManifest.xml
このような :
<application ... >
...
<!-- Main activity (which has no parent activity) -->
<activity
android:name="com.example.myapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
.....
android:parentActivityName=".MainActivity" >
<!-- Support Parent activity for Android 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myapp.MainActivity" />
</activity>
</application>
次に、サブアクティビティがAppCompatActivity
FragmentActivity ではなく extends であることを確認してください。
第三に、オーバーライドonOptionsItemSelected()
方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon action bar is clicked; go to parent activity
this.finish();
return true;
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
これが役立つことを願っています!
これを試してください、あなたの onCreate() で
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
クリックイベントについては、
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; goto parent activity.
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
私の場合; android:parentActivityName
次のように attr をアクティビティに追加する必要がありました。
<activity
android:name=".AboutActivity"
android:label="@string/title_activity_about"
android:parentActivityName=".MainActivity" />
戻るボタンが表示され、期待どおりに機能します。
マニフェスト.xml
<activity
android:name=".Activity.SecondActivity"
android:label="Second Activity"
android:parentActivityName=".Activity.MainActivity"
android:screenOrientation="portrait"></activity>
ActionBar actionBar=getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
画面に戻る私の作業コード。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(getApplicationContext(), "Home Clicked",
Toast.LENGTH_LONG).show();
// go to previous activity
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}