एक्शन बार पर बैक बटन प्रदर्शित करें


188

मैं पिछले पृष्ठ / गतिविधि या मुख्य पृष्ठ (पहले खोलने) को स्थानांतरित करने Back buttonके Action barलिए ऑन को प्रदर्शित करने की कोशिश कर रहा हूं । और मैं यह नहीं कर सकता।

मेरा कोड।

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

कोड में है onCreate


19
का प्रयोग करें: getSupportActionBar ()। SetDisplayHomeAsUpEnabled (सच);
सुचित्ता उदुगमसूरिया

जवाबों:


210

अच्छी तरह से यह बैक बटन दिखाने के लिए सरल है

actionBar.setDisplayHomeAsUpEnabled(true);

और फिर आप onOptionsItemSelected पर बैक ईवेंट को कस्टम कर सकते हैं

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

मैंने onOptionsItemSelected (MenuItem आइटम) के ऊपर उपरोक्त पंक्तियाँ जोड़ीं, क्योंकि मेरे पास पहले से ही एक्शन बैड में एक मेनू है जो मेनू विकल्पों को पुनर्निर्देशित करने के लिए आईडी को सूचीबद्ध कर रहा है, क्लिक करने पर घर का आईडी काम नहीं करता है

यदि आप अजीब व्यवहार का अनुभव करते हैं (जैसे: आप किसी खंड के बैक बटन (R.id.home) का उपयोग करते हैं और गतिविधि को समाप्त करते हैं), तो सुनिश्चित करें कि आपके पास इस गतिविधि पर "android: noHistory" सेट नहीं है, क्योंकि यदि आप करते हैं, यहां तक ​​कि एक टुकड़ा से गतिविधि के "अवलोकन" पर वापस जाने से यह खत्म हो जाएगा।
इगोर

3
सुनिश्चित करें कि आपने काम करने के लिए R.id.home बटन के लिए AndroidMenifest.xml में मूल गतिविधि सेट की है।
लीप हॉक

195

मुझे लगता onSupportNavigateUp()है कि ऐसा करने का सबसे अच्छा और आसान तरीका है, नीचे दिए गए चरणों की जाँच करें। चरण 1 आवश्यक है, चरण दो के पास विकल्प है।

स्टेप 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

3
सबसे अच्छा समाधान +10।
सर्वेश्वरन

3
यदि आप एक्शनबार के लिए समर्थन लाइब्रेरी का उपयोग नहीं कर रहे हैं, तो निम्नानुसार संशोधित करें: getActionBar().setDisplayHomeAsUpEnabled(true); @Override public boolean onNavigateUp(){ finish(); return true; }
atariguy

1
अभूतपूर्व। +1। सरल। सुरुचिपूर्ण। सुंदर। :)
रोहित कुमार

1
आपकी सहायता के लिए धन्यवाद। मैनिफ़ेस्ट का उपयोग करके, यह काम नहीं कर रहा था लेकिन कोड का उपयोग कर रहा है
santosh devnath

71

में जादू होता है 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 आइटम) ईवेंट नहीं होगा ... क्या इसके लिए कोई अन्य समाधान है ??
विधी

1
आपको getActionBar().setDisplayHomeAsUpEnabled(true);अपने
onCreateMethod

1
मुझे लगता है कि अगर आप इस तरह से करते हैं, तो आप पीछे नहीं हटते हैं, भले ही आप पिछली गतिविधि फिर से शुरू कर दें, अब इसका एक और अधिक हिस्सा है और आप हमेशा आगे और आगे बढ़ते हैं जब तक कि स्टैक ओवरफ्लो न हो जाए जब तक कि आप पर्याप्त रूप से लंबे समय तक नहीं रहते। मुझे लगता है कि इगोर का जवाब सही है कि आपको इस गतिविधि को खत्म करना बंद कर देना चाहिए () और चलिए आपको पिछले गतिविधि उदाहरण पर वापस आने देंगे।
रीजो कोरोएनन

2
this.onBackPressed();उपयोगकर्ता द्वारा बैक बटन पर क्लिक करने पर विधि का उपयोग करें।
CaptRisky

47

आधिकारिक समाधान

अपनी 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);
}

लोअर एसडीके का समर्थन करने के लिए प्रकट करने के लिए मेटा-डेटा और पेरेंट एक्टिविटी जोड़ें।

 <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 ()" का उपयोग करने की आवश्यकता होगी। यह सबसे पूर्ण, और आधिकारिक, उत्तर है।
क्रिस्टोफर बुल

33

इन लाइनों को 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);
        }
    }

आशा है कि यह आपकी मदद करेगा..!


28

इस कोड को आज़माएं, इसे केवल तभी मानें जब आपको बैक बटन की आवश्यकता हो।

@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 उपकरणों का समर्थन करना चाहते हैं तो आपको केवल मैनिफेस्ट कोड डालना होगा। हालांकि वर्तमान पुस्तकालयों के लिए कोड का पहला बिट एक बेहतर समाधान है।
लूई बर्टोन्सिन

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 डेवलपर दस्तावेज़ीकरण


8

अपने में 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);
}

6

मुझे पता है कि उपरोक्त कई उपयोगी उपाय हैं, लेकिन इस बार मैंने इस लेख (वर्तमान एंड्रॉइड स्टूडियो 2.1.2 के साथ sdk 23) को पढ़ा, ऊपर कुछ विधि काम नहीं करती है।

नीचे उप-गतिविधि के लिए मेरा समाधान MapsActivity है

सबसे पहले, आपको पेरेंट एक्टिविटी को जोड़ना होगा

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, न कि फ्रैगमेंटएक्टिविटी।

तीसरा, ओवरराइड 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

यह सरल है और मेरे लिए बहुत अच्छा काम करता है

इसे ऑनक्रिएट () विधि के अंदर जोड़ें

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

इसे ऑनक्रिएट () विधि के बाहर जोड़ें

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

4

इस कोशिश, अपने onCreate में ()

 getActionBar().setHomeButtonEnabled(true);
 getActionBar().setDisplayHomeAsUpEnabled(true);

और clickevent के लिए,

@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

इसे प्राप्त करने के लिए, बस दो चरण हैं,

चरण 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">

और style.xml में इसे बदल दें

Theme.AppCompat.Light.NoActionBar

यह वही है जो हमें करना है।


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


2

कोटलिन में एक्शन बार बैक बटन प्रदर्शित करने के लिए इसे लागू करने के 2 तरीके हैं

1. एंड्रॉइड द्वारा प्रदान की गई डिफ़ॉल्ट एक्शन बार का उपयोग करना - आपकी गतिविधि में एक्शन बार का उपयोग करना आवश्यक है - उदाहरण: 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 - अपनी गतिविधि में लेआउट जोड़ें। 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)
 }

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

0

OnCreate फ़ंक्शन में नीचे कोड जोड़ें:

getSupportActionBar () setDisplayHomeAsUpEnabled (सही)।

और फिर ओवरराइड करें: @Override सार्वजनिक बूलियन onOptionsItemSelected (MenuItem आइटम) {onBackPressed (); सच लौटना; }


0

अद्यतन संस्करण में getActionBar () काम नहीं करता है!

इसके बजाय, आप इसे इस तरह से कर सकते हैं

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

एंड्रॉइड टाइटल बार में बैक बटन जोड़ें यह आपको 2020 में मदद करता है


1
आपके उत्तर के अंतिम जोड़े दोनों एक ही साइट पर लिंक करते हैं। क्या आप किसी भी तरह से उस साइट से जुड़े / संबद्ध हैं? यदि आप संबद्ध हैं, तो आपको पोस्ट में उस संबद्धता का खुलासा करना होगा । यदि आप संबद्धता का खुलासा नहीं करते हैं, तो इसे स्पैम माना जाता है। देखें: क्या "अच्छा" आत्म प्रचार को दर्शाता है? , आत्म-प्रचार के बारे में कुछ सुझाव और सलाह , स्टैक ओवरफ्लो के लिए "स्पैम" की सटीक परिभाषा क्या है? , और क्या कुछ स्पैम बनाता है
Makyen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.