Android – 后退button在标题栏中

在许多应用程序(日历,云端硬盘,Play商店),当你点击一个button,并input一个新的活动,标题栏中的图标变成后退button,但对于我所做的应用程序,它不这样做。 我如何让这个图标带你回到上一个屏幕?

在标题栏中创build后退button有两个简单的步骤:

首先,使用下面的代码将应用程序图标点击,在标题栏中您想要有一个后退button:

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

添加上面的代码后,您将看到应用程序图标左侧出现一个后退箭头。

其次,在完成上述操作之后,您仍然需要创build利用click事件的代码。 要知道,当你真的点击应用程序图标时,会调用onOptionsItemSelected方法。 所以要回到之前的活动中,将该方法添加到您的活动中,并将Intent代码放入其中,以便将您返回到之前的活动。 例如,假设您正在尝试返回的活动名为MyActivity。 回到它写的方法如下:

 public boolean onOptionsItemSelected(MenuItem item){ Intent myIntent = new Intent(getApplicationContext(), MyActivity.class); startActivityForResult(myIntent, 0); return true; } 

而已!

(在Android开发者API中,它build议搞清楚清单并添加像android:parentActivityName这样的东西,但是这对我来说似乎不起作用,以上更简单,更可靠。

使用这个代码

  @Override public void onCreate(Bundle savedInstanceState) { ... getActionBar().setDisplayHomeAsUpEnabled(true); } 

之后,写这个代码在onOptionsItemSelected方法

  int id = item.getItemId(); if (id==android.R.id.home) { finish(); } 

我终于设法正确地将button添加到操作栏/工具栏

 @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.-将以下代码添加到活动的onCreate方法:

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

但是,只有当您的应用程序是当前任务的所有者时(也就是说,用户从您的应用程序开始执行此任务),才能使用navigateUpFromSameTask()。 如果这不是真的,并且您的活动是在属于另一个应用程序的任务中启动的,那么导航Up应创build一个属于您的应用程序的新任务,这需要您创build一个新的后退堆栈。

如果您的活动确实扩展活动

 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); [...] } [...] } 

没有更多的事情,请参阅加起来的行动

[可选]要显式定义父活动,请修改您的Manifest.xml,如下所示:

 <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> 

请参阅指定父级活动

如果您在android studio中使用5.1的新支持库,则可以在AppCompatActivity上使用此库

  ActionBar actionBar = getSupportActionBar(); actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeAsUpIndicator(R.mipmap.ic_arrow_back_white_24dp); actionBar.setDisplayShowHomeEnabled(true); 

干杯。

如果你正在使用一个ActionBar,你将要阅读这个文档http://developer.android.com/reference/android/app/ActionBar.html#setDisplayHomeAsUpEnabled(boolean);

然后,你必须覆盖onOptionsItemSelected(MenuItem)的方法,并寻找android.R.id.home事件进来。然后,你知道用户点击了操作栏上的后退button

没有使用ActionBarActivity轻量级版本仍然具有相同的bahaviors:

 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

最简单的方法和最佳实践在谷歌解释在这里 :

1.在AndroidManifest.xml为您的childActivity添加一个父项:

 <activity android:name=".ChildActivity" android:parentActivityName=".ParentActivity" > </activity> 

2.激活您的childActivity中的后退button:

 myActionOrActionSupportBar.setDisplayHomeAsUpEnabled(true); 

为我工作,我希望它也适用于你。

如果您的活动扩展了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()调用该方法,以便手机上的后退button和工具栏上的箭头执行相同的操作。

你也可以简单地把onBackPressed()放在你的onClick监听器中。 这会导致您的button在Android应用程序中像默认的“后退/上移”button一样操作!

您需要在清单文件中添加下面提到的代码。 search要添加后退箭头function的活动。 如果你发现一个罚款或创build活动

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

这是我如何解决这个问题。 谢谢。

通过在应用程序清单中指定父级活动,也可以在没有代码的情况下完成。如果要在活动B中获得活动A的后退button,只需在活动清单中将活动A添加为活动B的父级。