我正在开发一款Android应用。我正在使用ActionBar和AppCompactActivity。在我的应用程序中,我将按钮添加到操作栏。但是当我点击它时,它不会回到之前的活动。例如,我从活动1开始活动2.活动2包含带后退按钮的操作栏。但是当我点击活动2的操作栏后退按钮时,它不会返回到活动1。
这是我为活动2设置操作栏的方式:
public class EditProfileActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_profile);
Toolbar toolbar = (Toolbar)findViewById(R.id.profile_action_toolbar);
setSupportActionBar(toolbar);
setTitle("Edit Profile");
ActionBar actionBar= getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
这是我从活动1开始活动2的方式:
Intent i = new Intent(MainActivity.this,SecondActivity.class);
startActivity(i);
单击此按钮时不会返回
为什么不回去?
答案 0 :(得分:31)
将以下内容添加到您的活动中。您必须处理后退按钮的点击事件。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
答案 1 :(得分:8)
这里有2个选项:
a)在AndroidManifest.xml中为parentActivityName
标记提供SecondActivity
,如下所示:
<activity
...
android:name=".SecondActivity"
android:parentActivityName=".MainActivity" >
b)覆盖onOptionsItemSelected
中的SecondActivity
,如下所示:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
我建议您阅读this guide以获取更多信息。
答案 2 :(得分:1)
这是您的代码
public class EditProfileActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_profile);
Toolbar toolbar = (Toolbar)findViewById(R.id.profile_action_toolbar);
setSupportActionBar(toolbar);
setTitle("Edit Profile");
ActionBar actionBar= getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
}
答案 3 :(得分:1)
在onCreate()
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
toolbar.setNavigationOnClickListener(v -> {
//What to do when back is clicked
finish();
});
答案 4 :(得分:0)
首先,请始终查看Android指南http://developer.android.com/intl/pt-br/design/patterns/navigation.html,以防止Google阻止Android应用。
尝试在您的活动中添加此代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case android.R.id.home:
onBackPressed();
break;
}
return super.onOptionsItemSelected(menuItem);
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
答案 5 :(得分:0)
你必须覆盖onOptionsItemSelected并检查项目的id,如果它与home按钮的id相等,只需调用onBackPressed方法。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
}
return super.onOptionsItemSelected(item);
}
答案 6 :(得分:0)
您必须定义单击该按钮时应该发生的事情,这可以在您的第二个活动的onOptionsItemSelected方法中完成。请注意android.R.id.home
常量,它指的是您要使用的活动的后退按钮。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish(); //close the activty
return true;
}
return super.onOptionsItemSelected(item);
}
答案 7 :(得分:0)
我建议不要在onOptionsItemSelected中处理“ android.R.id.home”,因为它很脆弱。相反,您应该覆盖onSupportNavigateUp
方法。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
注意:如果使用onOptionsItemSelected
,则应默认返回false,否则将不调用onSupportNavigateUp
方法。