アクションバーに戻るボタンを表示する


181

Back button上に表示して、Action bar前のページ/アクティビティまたはメインページ(最初のオープニング)に移動しようとしています。そして、私はそれを行うことができません。

私のコード。

ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);

コードはにありonCreateます。


19
使用:getSupportActionBar()。setDisplayHomeAsUpEnabled(true);
スキタ・ウドゥガマソオリヤ2015年

@SukithaUdugamasooriyaありがとうございました
Sardorbek Rkh

回答:


207

よくこれは戻るボタンを表示する簡単なものです

actionBar.setDisplayHomeAsUpEnabled(true);

そして、あなたはonOptionsItemSelectedでbackイベントをカスタマイズできます

case android.R.id.home:
this.finish();
return true;

上記の行をon onOptionsItemSelected(MenuItem item)内に追加しました。アクションのメニューが既にあるため、メニューオプションをリダイレクトするためのIDがリストされているため、クリックするとホームIDが機能し

奇妙な動作(フラグメントの戻るボタン(R.id.home)を使用してアクティビティが終了するなど)が発生した場合は、このアクティビティに「android:noHistory」が設定されていないことを確認してください。フラグメントからアクティビティの「概要」に戻っても完了します。
イゴール

2
R.id.homeボタンが機能するように、AndroidMenifest.xmlで親アクティビティを設定してください。
Leap Hawk

192

これ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に感謝します。


2
このソリューションは、親アクティビティにデータを送り返す必要がある場合や、親アクティビティでEditTextの値を保持する場合に最適です。onOptionsItemSelected解決策を試しましたが、失敗しました。
weeix 2016

3
最良のソリューション+10。
Satheeshwaran

3
あなたがアクションバーのサポートライブラリを使用していない場合は、次のように変更します getActionBar().setDisplayHomeAsUpEnabled(true); @Override public boolean onNavigateUp(){ finish(); return true; }
atariguy

1
驚異的な。+1。シンプル。エレガント。綺麗な。:)
Rohit Kumar

1
ご協力いただきありがとうございます。マニフェストを使用することで機能しませんでしたが、機能するコードを使用します
santosh devnath

70

魔法はで起こり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);
    }
}

1
私の場合、onOptionsItemSelected(MenuItem item)イベントが表示されないページに戻るボタンを追加したいのですが...他の解決策はありますか?
Vidhi

1
getActionBar().setDisplayHomeAsUpEnabled(true);最初にonCreateMethod を追加して、[戻る]ボタンを追加する必要があります
aletede91

1
このようにすると、以前のアクティビティをもう一度開始しても、もう1つのインスタンスが発生しても元に戻らず、十分な時間継続すると、スタックオーバーフローが発生するまで常に前後に進むと思います。Igorの答えは正しいと思います。finish()でこのアクティビティを停止し、フレームワークが実行中の前のアクティビティインスタンスに戻るようにする必要があります。
Reijo Korhonen

2
this.onBackPressed();ユーザーが戻るボタンをクリックしたときにメソッドを使用します。
CaptRisky

47

公式ソリューション

これら2つのコードスニペットをサブアクティビティに追加します

@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


5
注:後方互換性のためにサポートライブラリを使用する場合は、「getActionBar()」の代わりに「getSupportActionBar()」を使用する必要があります。これが最も完全で公式な答えです。
クリストファーブル

32

これらの行を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);
        }
    }

これがあなたに役立つことを願っています。


27

このコードを試してください。戻るボタンが必要な場合にのみ考慮してください。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //YOUR CODE
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    //YOUR CODE
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}

17

あなたのonCreateメソッドに追加:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

AndroidManifest.xml親アクティビティ(アクションバーの[戻る]ボタンが押されたときに呼び出されるアクティビティ)を定義している間:

あなたには<activity>マニフェストの定義、行を追加します。

android:parentActivityName="com.example.activities.MyParentActivity"

4.0より前のデバイスをサポートする場合は、マニフェストコードを挿入するだけです。ただし、コードの最初のビットは、現在のライブラリのより良いソリューションです。
Louie Bertoncin

8

私は少し遅れていることを知っていますが、ドキュメントを直接フォローすることでこの問題を修正することができました。

メタデータタグを追加するAndroidManifest.xml(システムが認識できるようにするため)

 <activity
        android:name=".Sub"
        android:label="Sub-Activity"
        android:parentActivityName=".MainChooser"
        android:theme="@style/AppTheme.NoActionBar">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainChooser" />
    </activity>

次に、あなたのバック(上)ボタンを有効にします MainActivity

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_child);
 
    // my_child_toolbar is defined in the layout file 
    Toolbar myChildToolbar =
        (Toolbar) findViewById(R.id.my_child_toolbar);
    setSupportActionBar(myChildToolbar);
 
    // Get a support ActionBar corresponding to this toolbar 
    ActionBar ab = getSupportActionBar();
 
    // Enable the Up button 
    ab.setDisplayHomeAsUpEnabled(true);
    } 

そして、あなたはすべてセットアップされます!

出典:Android Developer Documentation


6

上記が多くの役立つ解決策であることは知っていますが、今回はこの記事(現在の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>

次に、AppCompatActivityFragmentActivityではなく、サブアクティビティが拡張されることを確認します。

3番目に、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);
        }
    }

これが役立つことを願っています!


4

あなたの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);
        }
    }

4

これを達成するには、2つのステップがあります。

手順1:に移動しAndroidManifest.xmlて、このパラメーターを<activity>タグに追加します-android:parentActivityName=".home.HomeActivity"

例:

<activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

ステップ2:前のページ/アクティビティをActivityDetail追加するaction

例:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return super.onOptionsItemSelected(item);
}

4

onCreateメソッドの書き込み

Toolbar toolbar = findViewById(R.id.tool);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }
}
@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
@Override
public void onBackPressed() {
    super.onBackPressed();
    startActivity(new Intent(ActivityOne.this, ActivityTwo.class));
    finish();
}

これはxmlファイルです

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:id="@+id/tool">

そしてstyles.xmlでそれを

Theme.AppCompat.Light.NoActionBar

これが私たちがしなければならないことのすべてです。


4

これは簡単で、私にはとてもうまくいきます

これをonCreate()メソッドの中に追加します

getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

これを外部のoncreate()メソッドに追加します

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}

3

あなたのonCreate()方法でこの行を追加してください

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

同じアクティビティで、このメソッドを追加してボタンのクリックを処理します

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        this.finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

2

私はこのように解決しました

@Override
public boolean  onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onBackPressed(){
    Intent backMainTest = new Intent(this,MainTest.class);
    startActivity(backMainTest);
    finish();
}

1

画面に戻るための私の作業コード。

@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);
}

1
 public void initToolbar(){
       //this set back button 
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);
       //this is set custom image to back button
       getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_btn_image);
}


//this method call when you press back button
@Override
public boolean onSupportNavigateUp(){
    finish();
    return true;
}

1
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);
}

1

答えるには遅すぎるかもしれませんが、私は私の意見ではより短くより機能的な解決策を持っています。

// Inside your onCreate method, add these.
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);

// After the method's closing bracket, add the following method exactly as it is and voiulla, a fully functional back arrow appears at the action bar
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}

1

oncreate(); この行を書く->

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

次に、そのクラスに以下のメソッドを実装します

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case android.R.id.home:
        // app icon in action bar clicked; go home
      onBackPressed();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

1

Manifest.xml

<activity
            android:name=".Activity.SecondActivity"
            android:label="Second Activity"
            android:parentActivityName=".Activity.MainActivity"
            android:screenOrientation="portrait"></activity>

1

Kotlinでアクションバーの戻るボタンを表示 するには、それを実装する2つの方法があります

1. Androidが提供するデフォルトのアクションバーを使用する -アクティビティでは、アクションバーのあるテーマを使用する必要があります-例:Theme.AppCompat.Light.DarkActionBar

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val actionBar = supportActionBar
    actionBar!!.title = "your title"
    actionBar.setDisplayHomeAsUpEnabled(true)
    //actionBar.setDisplayHomeAsUpEnabled(true)
}

override fun onSupportNavigateUp(): Boolean {
    onBackPressed()
    return true
}

2.独自のアクションバーを設計します -デフォルトのアクションバーを無効にします-例:Theme.AppCompat.Light.NoActionBar-レイアウトをactivity.xmlに追加します

    <androidx.appcompat.widget.Toolbar
     android:id="@+id/main_toolbar"
     android:layout_width="match_parent"
     app:layout_constraintEnd_toEndOf="parent"
     app:layout_constraintStart_toStartOf="parent"
     app:layout_constraintTop_toTopOf="parent">

     <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         tools:layout_editor_absoluteX="16dp">

         <TextView
             android:id="@+id/main_toolbar_title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="Your Title"
             android:textSize="25sp"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHorizontal_bias="0.5"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />

     </androidx.constraintlayout.widget.ConstraintLayout>
 </androidx.appcompat.widget.Toolbar>
  • onCreate
override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)

     setSupportActionBar(findViewById(R.id.main_toolbar))
 }
  • 独自のボタンを作成する
<?xml version="1.0" encoding="utf-8"?>
<menu
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto" >

 <item
     android:id="@+id/main_action_toolbar"
     android:icon="@drawable/ic_main_toolbar_item"
     android:title="find"
     android:layout_width="80dp"
     android:layout_height="35dp"
     app:actionLayout="@layout/toolbar_item"
     app:showAsAction="always"/>

</menu>
  • YourActivity.kt
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
     menuInflater.inflate(R.menu.main_toolbar_item, menu)

     leftToolbarItems = menu!!.findItem(R.id.main_action_toolbar)
     val actionView = leftToolbarItems.actionView
     val badgeTextView = actionView.findViewById<TextView>(R.id.main_action_toolbar_badge)
     badgeTextView.visibility = View.GONE

     actionView.setOnClickListener {
         println("click on tool bar")
     }
     return super.onCreateOptionsMenu(menu)
 }

0

以下のコードをonCreate関数に追加します。

getSupportActionBar()。setDisplayHomeAsUpEnabled(true);

次にオーバーライドします。@Override public boolean onOptionsItemSelected(MenuItem item){onBackPressed(); trueを返します。}


0

更新されたバージョンでは、getActionBar()は機能しません。

代わりに、この方法でこれを行うことができます

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

Androidのタイトルバーに戻るボタンを追加すると、2020年に役立ちます


最後の2つの回答はどちらも同じサイトにリンクしています。何らかの方法でそのサイトに関連付けられていますか?所属している場合は、その所属を投稿で開示する必要あります。アフィリエーションを開示しない場合、スパムと見なされます。参照:「良い」自己宣伝を意味するものは何ですか?自己宣伝に関するいくつかのヒントやアドバイススタックオーバーフローのための「スパム」の正確な定義は何ですか?、そして何かがスパムになるもの
Makyen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.