कई ऐप (कैलेंडर, ड्राइव, प्ले स्टोर) में जब आप एक बटन टैप करते हैं और एक नई गतिविधि दर्ज करते हैं, तो टाइटल बार में आइकन बैक बटन में बदल जाता है, लेकिन मैं जो ऐप बना रहा हूं, वह ऐसा नहीं करता है। मैं उस आइकन को पिछली स्क्रीन पर वापस कैसे ले जाऊं?
कई ऐप (कैलेंडर, ड्राइव, प्ले स्टोर) में जब आप एक बटन टैप करते हैं और एक नई गतिविधि दर्ज करते हैं, तो टाइटल बार में आइकन बैक बटन में बदल जाता है, लेकिन मैं जो ऐप बना रहा हूं, वह ऐसा नहीं करता है। मैं उस आइकन को पिछली स्क्रीन पर वापस कैसे ले जाऊं?
जवाबों:
टाइटल बार में बैक बटन बनाने के दो सरल चरण हैं:
सबसे पहले, उस गतिविधि के निम्नलिखित कोड का उपयोग करके एप्लिकेशन आइकन को क्लिक करने योग्य बनाएं जिसका शीर्षक बार में आप बैक बटन रखना चाहते हैं:
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
उपरोक्त कोड जोड़ने के बाद, आपको एप्लिकेशन आइकन के बाईं ओर एक बैक एरो दिखाई देगा।
दूसरा, आपके द्वारा उपरोक्त कार्य करने के बाद, आपको अभी भी कोड बनाना होगा जो क्लिक इवेंट का लाभ उठाएगा। ऐसा करने के लिए, ध्यान रखें कि, जब आप वास्तव में एप्लिकेशन आइकन पर क्लिक करते हैं, तो एक onOptionsItemSelected
विधि कहा जाता है। तो पिछली गतिविधि पर वापस जाने के लिए, अपनी गतिविधि में उस पद्धति को जोड़ें और उसमें Intent
कोड डालें जो आपको पिछली गतिविधि में वापस कर देगा। उदाहरण के लिए, मान लीजिए कि जिस गतिविधि को आप वापस जाने की कोशिश कर रहे हैं उसे कहा जाता है MyActivity
। इस पर वापस जाने के लिए, इस प्रकार विधि लिखें:
public boolean onOptionsItemSelected(MenuItem item){
Intent myIntent = new Intent(getApplicationContext(), MyActivity.class);
startActivityForResult(myIntent, 0);
return true;
}
बस!
(एंड्रॉइड डेवलपर्स एपीआई में, यह प्रकट रूप से गड़बड़ करने और सामान जोड़ने की सलाह देता है android:parentActivityName
। लेकिन यह मेरे लिए काम नहीं करता है। उपरोक्त सरल और अधिक विश्वसनीय है।)
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
और आपकी गतिविधि में
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
इस कोड का उपयोग करें
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
उसके बाद इस कोड को onOptionsItemSelected
विधि में लिखें
int id = item.getItemId();
if (id==android.R.id.home) {
finish();
}
getActionBar()
मुझे एक अशक्त देता है; तुम जानते हो क्यों?
मैं आखिरकार एक्शनबार / टूलबार में ठीक से बैक बटन जोड़ने में कामयाब रहा
@Override
public void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
1.- AndroidManifest.xml में गतिविधि जोड़ें और मेटा-डेटा प्रदान करना सुनिश्चित करें:
<activity
android:name="com.example.myfirstapp.DisplayMessageActivity"
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>
2.- गतिविधि की विधि पर निम्नलिखित कोड जोड़ें:
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
3.- onOptionsItemSelected को ओवरराइड करें और स्टैक को नेविगेट करने के लिए NavUtils.navigateUpFromSameTask () स्टैटिक विधि का उपयोग करें।
@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);
}
हालाँकि, जब आपके ऐप को वर्तमान कार्य का स्वामी है (यानी, उपयोगकर्ता ने आपके ऐप से यह कार्य शुरू किया है) केवल तब ही नेविगेट किया जाता है। यदि यह सच नहीं है और आपकी गतिविधि एक ऐसे कार्य में शुरू हुई थी, जो एक अलग ऐप से संबंधित है, तो नेविगेट करने के लिए एक नया कार्य बनाना चाहिए जो आपके ऐप से संबंधित है, जिसके लिए आपको एक नया बैक स्टैक बनाने की आवश्यकता है।
यदि आपकी गतिविधि गतिविधि का विस्तार करती है
public class YourActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xxx);
getActionBar().setHomeButtonEnabled(true);
[...]
}
[...]
}
यदि आपकी कार्रवाई AppCompatActivity का विस्तार करती है
public class YourActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xxx);
getSupportActionBar().setHomeButtonEnabled(true);
[...]
}
[...]
}
ज्यादा कुछ नहीं करना है, देखें क्रिया जोड़ें
[वैकल्पिक] मूल गतिविधि को स्पष्ट रूप से परिभाषित करने के लिए अपने घोषणापत्र को संशोधित करें। इस तरह से करें:
<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.YourActivity "
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>
यदि आपकी गतिविधि फैली हुई है, AppCompatActivity
तो आपको इस onSupportNavigateUp()
तरह से विधि को ओवरराइड करने की आवश्यकता है :
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
...
}
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
}
अपनी onBackPressed()
विधि में अपने तर्क को संभालें और बस उस विधि onSupportNavigateUp()
को फोन पर बैक बटन और टूलबार पर तीर को एक ही काम करें।
सबसे पहले onCreate फंक्शन में निम्नलिखित लाइन जोड़ें
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
और फिर कोड में निम्नलिखित फ़ंक्शन जोड़ें:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
सबसे पहले आपको यह कोड लिखना होगा
@Override
protected void onCreate(Bundle savedInstanceState) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
फिर इस लाइन को प्रकट में जोड़ें
<activity android:name=".MainActivity"
android:parentActivityName=".PreviousActivity"></activity>
मुझे लगता है यह उचित होगा
यदि आप एंड्रॉइड स्टूडियो में 5.1 के लिए नई समर्थन लाइब्रेरी का उपयोग कर रहे हैं, तो आप इसके बजाय अपने AppCompatActivity पर इसका उपयोग कर सकते हैं
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.mipmap.ic_arrow_back_white_24dp);
actionBar.setDisplayShowHomeEnabled(true);
खुश होती है।
Google के रूप में सबसे सरल तरीका और सर्वोत्तम अभ्यास यहाँ बताया गया है :
1. अपने बच्चे के लिए एक माता-पिता जोड़ें AndroidManifest.xml
:
<activity
android:name=".ChildActivity"
android:parentActivityName=".ParentActivity" >
</activity>
2. अपने बच्चे में वापस बटन सक्रिय करें:
myActionOrActionSupportBar.setDisplayHomeAsUpEnabled(true);
मेरे लिए काम किया, मुझे आशा है कि यह आपके लिए भी काम करेगा।
एक गुणवत्ता समय के बाद मैंने पाया है, मेरे विकल्प में विषय विकल्प मुख्य समस्या है और निम्नलिखित मेरे लिए टूलबार दिखाने का उचित तरीका है
AndroidManifest फ़ाइल में पहले आपको अपनी थीम शैली बदलनी होगी
Theme.AppCompat.Light.DarkActionBar
to
Theme.AppCompat.Light.NoActionBar
फिर आपकी गतिविधि xml पर आपको अपने खुद के टूलबार को कॉल करने की आवश्यकता है
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:id="@+id/toolbar"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:elevation="4dp"/>
और फिर इस टूलबार को आपकी जावा फ़ाइल में कहा जाना चाहिए
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
और टूलबार के लिए U को NullPointerException से बचने के लिए नल की जांच करनी चाहिए
if(getSupportActionBar() != null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
होम गतिविधि के लिए इसे वापस जोड़ें
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId()==android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
या अपनी इच्छित गतिविधि के लिए वापस
public boolean onOptionsItemSelected(MenuItem item){
Intent myIntent = new Intent(getApplicationContext(), YourActivity.class);
startActivityForResult(myIntent, 0);
return true;
}
मैंने इतने अधिक जटिल उत्तर देखे, इसलिए यह मेरा कोड है। यहाँ काम कर रहा है। आप इसे दो तरीकों से हासिल कर सकते हैं।
1) स्टारडार्ड एंड्रॉइड कॉम्पिटिटैलिटी
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.NavUtils;
import android.view.MenuItem;
import android.view.View;
public class EditDiscoveryActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_discovery);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
/*toolbar.setNavigationIcon(R.drawable.ic_arrow_white_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});*/
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
}
2) एक कस्टम आइकन का उपयोग करें
यदि आप टिप्पणियों में कोड का उपयोग करना चाहते हैं, तो आपको इस फाइल को drawable में जोड़ना होगा, जिसे ic_arrow_white_24dp.xml कहा जाता है
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#ffffff"
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>
</vector>
इस कोड के साथ।
toolbar.setNavigationIcon(R.drawable.ic_arrow_white_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
आशा है कि यह यहाँ कुछ लोगों की मदद करेगा!
लाइट-वेटेड संस्करण का उपयोग किए बिना ActionBarActivity
अभी भी यहाँ वही व्यवहार है:
public class ToolbarConfigurer implements View.OnClickListener {
private Activity activity;
public ToolbarConfigurer(Activity activity, Toolbar toolbar, boolean displayHomeAsUpEnabled) {
toolbar.setTitle((this.activity = activity).getTitle());
if (!displayHomeAsUpEnabled) return;
toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
toolbar.setNavigationOnClickListener(this);
}
@Override
public void onClick(View v) {
NavUtils.navigateUpFromSameTask(activity);
}
}
उपयोग: रखो new ToolbarConfigurer(this, (Toolbar) findViewById(R.id.my_awesome_toolbar), true);
में onCreate
।
आपको प्रकट फ़ाइल में नीचे दिए गए कोड को जोड़ना होगा। उस गतिविधि के लिए खोजें जिसमें आप बैक एरो फ़ंक्शनलिटी जोड़ना चाहते हैं। यदि आप एक पाते हैं तो ठीक है या गतिविधि बनाएं
<activity android:name=".SearchActivity">
</activity>
फिर कोड की निम्नलिखित तीन पंक्तियों को बीच में जोड़ें।
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.raqib.instadate.MainActivity" />
और onCreate () में कोड के इस टुकड़े को जोड़ना मत भूलना; आपकी विशेष गतिविधि का तरीका जिसमें आपको बैक एरो की आवश्यकता होती है।
Toolbar toolbar = (Toolbar) findViewById(R.id.searchToolbar);
setSupportActionBar(toolbar);
try{
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}catch(NullPointerException e){
Log.e("SearchActivity Toolbar", "You have got a NULL POINTER EXCEPTION");
}
इस तरह मैंने इस समस्या को हल किया। धन्यवाद।
अन्य उत्तरों में यह उल्लेख नहीं है कि आप इसे अपने Toolbar
विजेट के XML में भी सेट कर सकते हैं :
app:navigationIcon="?attr/homeAsUpIndicator"
उदाहरण के लिए:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:navigationIcon="?attr/homeAsUpIndicator"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:title="@string/title_activity_acoustic_progress" />
आपको 2020 में करने की आवश्यकता है:
(आप मुख्यता पर वापस लौटना चाहते हैं)
protected void onCreate(Bundle savedInstanceState){
...
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
public boolean onOptionsItemSelected(MenuItem item) {
Intent myIntent = new Intent(getApplicationContext(), MainActivity.class);
startActivityForResult(myIntent, 0);
return true;
}
यदि आप एक ActionBar का उपयोग कर रहे हैं तो आप इस प्रलेखन पर पढ़ना चाहते हैं http://developer.android.com/reference/android/app/ActionBar.html#setDisplayHomeAsUpEnabled(boolean)
फिर आपको ओनओटेशंस इटेम सेलेक्टेड (मेन्यूइटेम) विधि को ओवरराइट करना होगा और आने के लिए android.R.id.home ईवेंट की तलाश करनी होगी। तब आपको पता चलेगा कि उपयोगकर्ता ने एक्शनबार पर उस बैक बटन पर क्लिक किया है।
यह ऐप मेनिफ़ेस्ट में पेरेंट एक्टिविटी को निर्दिष्ट करके बिना कोड के भी किया जा सकता है। यदि आप एक्टिविटी बी में बैक बटन चाहते हैं, जो एक्टिविटी ए में होगा, तो एक्टिविटी ए में एक्टिविटी बी के पैरेंट के रूप में ए जोड़ें।
कोटलिन के लिए:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
onBackPressed();
return true;
}
मुझे अपने लिए सही उत्तर पाने के लिए कुछ उत्तरों को मिलाने की आवश्यकता थी क्योंकि मेरे ऐप में 3 गतिविधियाँ हैं जो किसी भी समय जा सकती हैं और वापस आ सकती हैं। गतिविधि 1> गतिविधि 2> गतिविधि 3। जब मैं अपनी गतिविधि 3 पर कुछ कर रहा था, तो बैक बटन एक्टिविटी 2 में सही तरीके से बैक हो रहा था। हालाँकि, गतिविधि 2 से, का उपयोग करते हुए finish()
, यह गतिविधि 3 पर वापस जा रहा था और गतिविधि 1 से नहीं। और मैं AppCompatActivity का विस्तार कर रहा हूं। तो, मेरा समाधान था:
public class Activity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setHomeButtonEnabled(true);
}
}
AndroidManifest.xml पर:
<activity android:name=".activities.Activity2"
android:parentActivityName="com.example.appname.activities.Activity1">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.appname.activities.Activity1" />
</activity>
और अंत में, मेरे मेनू पर कार्रवाई बटन (एक्शनबार):
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
...
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
NavUtils.navigateUpFromSameTask(this);
इसके बजाय मेरे लिए काम करना , का उपयोग करना finish()
।
बस कुछ साझा करने से मुझे मदद मिली और दूसरों के लिए उपयोगी हो सकती है। यद्यपि यहाँ अधिकांश उत्तर सही हैं, लेकिन इसका उपयोग करके getActionBar().setDisplayHomeAsUpEnabled(true);
, यह मेरे लिए काम नहीं कर रहा था। मेरे पास मुद्दा यह था कि मैं मैन्युअल रूप से एक दूसरी गतिविधि बनाने की कोशिश कर रहा था, लेकिन इसमें और विवरण शामिल हैं।
Android डेवलपर्स ट्यूटोरियल ( https://developer.android.com/training/basics/firstapp/starting-activity ) Android Studio के स्वयं के टूल का उपयोग करके दूसरी गतिविधि बनाने के लिए वास्तव में मेरी समस्या का हल क्या था ?
Create the second activity
1. In the Project window, right-click the app folder and select New > Activity > Empty Activity.
2. In the Configure Activity window, enter "DisplayMessageActivity" for Activity Name and click Finish (leave all other properties set to the defaults).
Android Studio automatically does three things:
- Creates the DisplayMessageActivity file.
- Creates the corresponding activity_display_message.xml layout file.
- Adds the required <activity> element in AndroidManifest.xml.
तुम भी बस onBackPressed()
अपने onClick श्रोता में डाल सकते हैं । यह आपके बटन को एंड्रॉइड ऐप्स में डिफ़ॉल्ट "बैक / अप" बटन की तरह काम करने का कारण बनता है!
Toolbar toolbar=findViewById(R.id.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (getSupportActionBar()==null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==android.R.id.home)
finish();
return super.onOptionsItemSelected(item);
}
यह मेरे लिए काम कर रहा है .. मान लीजिए कि दो गतिविधि हैं (एक्टिविटी, एक्टिविटी)
एक्टिविटीट्वो के अंदर इस कोड का उपयोग करें
@Override
protected void onCreate(Bundle savedInstanceState) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
एक्टिविटी पर
//when you need to go second activity
startActivity(new Intent(Activityone.this, Activitytwo.class));
इसे प्रकट फ़ाइल के अंदर दूसरी गतिविधि में शामिल किया जाना चाहिए
<activity android:name=".Activitytwo"
android:parentActivityName=".Activityone"></activity>
और परिणाम इस तरह होगा
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.YourxmlFileName);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id==android.R.id.home) {
finish();
return true;
}
return false;
}
यह मेरे लिए काम कर रहा है getSupportActionBar ()। SetDisplayHomeAsUpEnabled (गलत) यहां छवि विवरण दर्ज करें