[英]how to override action bar back button in android?
我想自定义操作栏中的活动后退按钮,而不是硬键后退按钮。 我已经覆盖了onBackPressed()
方法。 它适用于我的模拟器后退按钮,但不适用于操作栏后退按钮。
我希望它发生在操作栏上。 我怎样才能做到这一点?
这是我的代码:
@Override
public void onBackPressed() {
Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();
return;
}
无论后退是否有效,我都使用了这个吐司,但实际的实现变化就像回到以前的活动一样。 但这不适用于操作栏顶部的按钮(除了活动的标题)。
请任何人都可以指定我的问题。
我想你想覆盖主页按钮的点击操作。 您可以在您的活动中像这样覆盖此功能。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
如果您希望 ActionBar 后退按钮的行为与硬件后退按钮相同:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return false;
}
要记住的两件事是用户可以按后退按钮或按操作栏主页按钮。
所以,如果你想把他重定向到同一个目的地,那么你可以这样做。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return false;
}
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
startActivity(intent);
finish();
}
这将使用户按任一键或操作栏按钮进入意图。
对不起,我的回答晚了,但对于其他人带着同样的问题来到这个页面,我已经尝试了上面的方法:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
...
if (item.getItemId() == android.R.id.home) {
....
}
....
}
但这未能赶上“后退”按钮的按下。
最终,我在https://stackoverflow.com/a/37185334/3697478上找到了一种对我有用的方法,当我使用“AppCompatActivity”支持库中的操作栏时,它会覆盖“onSupportNavigateUp()”。 (对于较新的操作栏/工具栏库,有一个等效的“onNavigateUp()”。)
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
我从清单文件中删除了“android:parentActivityName=".MainActivity”部分。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
}
return true;
}
我通过简单的两个步骤实现了这一点,
第 1 步:转到 AndroidManifest.xml 并在标签中添加参数 - android:parentActivityName=".home.HomeActivity"
例子 :
<activity
android:name=".home.ActivityDetail"
android:parentActivityName=".home.HomeActivity"
android:screenOrientation="portrait" />
第 2 步:在 ActivityDetail 中为上一页/活动添加您的操作
例子 :
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
如果您想通过按下 ActionBar 主页按钮返回到Activity的前一个实例,而不重新创建它,您可以覆盖 getParentActivityIntent 方法以使用返回堆栈中的一个:
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
编辑:
您也可以通过以下方式获得相同的结果
将您的父活动的launchMode设置为singleTop。
因此,将android:launchMode="singleTop"
为清单中的父活动。
或者您可以将标志 FLAG_ACTIVITY_CLEAR_TOP 与 UP 意图一起使用。
参考: 提供向上导航
(1) 为您的子活动添加父活动 (AndroidManifest.xml)
<activity
android:name=".ParentActivity" />
(2) 覆盖子Activity内部的onSupportNavigateUp方法
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return false;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == android.R.id.home) {
onBackPressed();
return true;
}
//noinspection SimplifiableIfStatement
if (id == R.id.signIn) {
return true;
}
return super.onOptionsItemSelected(item);
}
///////////////////
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
有几种方法可以在栏中设置后退按钮:
1) 方法.setDisplayHomeAsUpEnabled(true);
会这样做,然后你可以简单地覆盖android.R.id.home
2) 在 Android Manifest 中添加<meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" />
,但在这种情况下你不能覆盖android.R.id.home
在 OnOptionsMenuSelected 中。
..对于那些想知道为什么它对他们不起作用的人......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.