我想在操作栏中自定义活动后退按钮,而不是在硬键后退按钮中。我已经覆盖了onBackPressed()
方法。它适用于我的模拟器后退按钮,但不适用于操作栏后退按钮。
我希望它与动作栏一起发生。我怎么能这样做?
这是我的代码:
@Override
public void onBackPressed() {
Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();
return;
}
我已经使用过这个toast,无论后退是否正常工作,但实际的实现更改为回到之前的活动。但这不适用于操作栏顶部的按钮(除了活动标题)。
请任何人指出我的问题。
答案 0 :(得分:188)
我认为你想要覆盖主页按钮的点击操作。您可以在活动中覆盖此功能。
@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;
}
答案 1 :(得分:37)
如果您希望ActionBar后退按钮的行为与硬件后退按钮相同:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return false;
}
答案 2 :(得分:8)
要记住两件事,用户可以按后退按钮或按动作栏主页按钮。
因此,如果您想将他重定向到同一目的地,那么您可以这样做。
@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();
}
这将使用户按下任意键或操作栏按钮。
答案 3 :(得分:7)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
}
return true;
}
答案 4 :(得分:3)
我通过简单的两个步骤实现了这一目标,
步骤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);
}
答案 5 :(得分:2)
如果您想通过按ActionBar主页按钮而不重新创建来返回上一个活动实例,则可以覆盖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意图一起使用
参考:Providing Up Navigation
答案 6 :(得分:2)
很抱歉我的回答是迟到的,但是对于其他任何人来到这个页面都有同样的问题,我已经尝试了以上内容:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
...
if (item.getItemId() == android.R.id.home) {
....
}
....
}
但这未能赶上&#34; Back&#34;按钮按下。
最终我在https://stackoverflow.com/a/37185334/3697478找到了一个对我有用的方法,即覆盖&#34; onSupportNavigateUp()&#34;因为我正在使用&#34; AppCompatActivity&#34;支持库。 (对于较新的操作栏/工具栏库,有一个等效的&#34; onNavigateUp()&#34;。
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
我删除了&#34; android:parentActivityName =&#34; .MainActivity&#34;清单文件中的部分。
答案 7 :(得分:2)
(1)为您的子活动(AndroidManifest.xml)添加父活动
<activity
android:name=".ParentActivity" />
(2)覆盖子活动中的onSupportNavigateUp方法
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return false;
}
答案 8 :(得分:0)
@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();
}
答案 9 :(得分:0)
如何在栏中设置后退按钮有几种方法:
1)方法.setDisplayHomeAsUpEnabled(true);
将执行此操作,然后您只需覆盖android.R.id.home
2)在Android Manifest中添加<meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" />
,但在这种情况下,您无法覆盖OnOptionsMenuSelected中的android.R.id.home
。
..对于那些想知道为什么它不起作用的人......