web-dev-qa-db-ja.com

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

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

私のコード.

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

コードはonCreateにあります。

151
Dany Maor

よくこれは戻るボタンを表示するためのシンプルなものです

actionBar.setDisplayHomeAsUpEnabled(true);

それから、onOptionsItemSelectedでbackイベントをカスタマイズできます。

case Android.R.id.home:
this.finish();
return true;
187
fhamicode

私は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を追加できます。

<meta-data
        Android:name="Android.support.PARENT_ACTIVITY"
        Android:value="MainActivity" />

編集:AppCompatアクティビティを使用していない場合はsupport Wordを使用しないでください。

getActionBar().setDisplayHomeAsUpEnabled(true); // In `OnCreate();`

// And override this method
@Override 
public boolean onNavigateUp(){ 
     finish(); 
     return true; 
}

コメントをくれた@atariguyに感謝します。

162

魔法は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);
    }
}
63

公式ソリューション

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

より低いSDKをサポートするために明示するためにメタデータとparentActivityを追加します。

 <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

45
hoot

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

これがお役に立てば幸いです。

31
Abhishek

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

@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;
}
22
Jaime

onCreateメソッドに以下を追加してください。

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

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

マニフェストの<activity>定義に次の行を追加します。

Android:parentActivityName="com.example.activities.MyParentActivity"
16
Bruno Peres

私は少し遅れていることを知っていますが、 ドキュメント を直接たどることでこの問題を解決することができました。

メタデータタグを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で戻る(up)ボタンを有効にしてください。

    @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

8
Avi Parshan

私は上記が多くの有用な解決策であることを知っています、しかし今回私はこの記事(sdk 23を持つ現在のAndroid Studio 2.1.2)を読みます上記のいくつかの方法はうまくいきません。

以下は副活動のための私の解決策は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>

次に、サブアクティビティがFragmentActivityではなくAppCompatActivityを拡張するようにします。

第三に、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);
        }
    }

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

5
postace

これを実現するには、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
Vivek Hande

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

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

3
PAWAN LAKHOTIA

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

onCreate()メソッド内にこれを追加してください

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

この外側のoncreate()メソッドを追加してください

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

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

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

@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();
}
2
Ardit Zeza

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

// 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
ndungujan
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
akshay shetty

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

@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
Shihab Uddin
 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

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);
    }
}
0
Manthan Patel

Manifest.xml

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

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

getSupportActionBar()。setDisplayHomeAsUpEnabled(true);

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

0
user7347514