在 Android 中显示操作栏的返回按钮不能返回

9

我正在开发一个安卓应用程序,使用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);

当我点击这个按钮时,它没有返回

enter image description here

为什么它不返回?
9个回答

53

将以下内容添加到您的活动中。您必须处理返回按钮的点击事件。

@Override
 public boolean onOptionsItemSelected(MenuItem item) {
      switch (item.getItemId()){
         case android.R.id.home:
              onBackPressed();
              return true;
       }
   return super.onOptionsItemSelected(item);
 }

谢谢,它起作用了。我很快会采纳这个答案。但是我已经点赞了。 - Wai Yan Hein
这里是一个真正的英雄 :) - Anjana Silva

11

这里有两个选项:

a) 在 AndroidManifest.xml 文件中为你的 SecondActivity 标签提供一个 parentActivityName,像这样:

 <activity
    ...
    android:name=".SecondActivity"
    android:parentActivityName=".MainActivity" >

b) 在SecondActivity中重写onOptionsItemSelected方法,如下所示:

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

我建议阅读这份指南以获取更多信息。


4

我建议不要在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方法。

你的笔记很有帮助。在此之前,我总是使用 _onSupportNavigateUp _,并且从未同时重写 onOptionsItemSelected 和 onSupportNavigateUp。在 onOptionsItemSelected 中返回 false 是有效的。 - AndroidLearner

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

1

Add this to your Activity, in 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();
    });

0

首先,为了避免谷歌封锁Android应用,请始终查看Android指南http://developer.android.com/intl/pt-br/design/patterns/navigation.html

尝试在您的Activity中添加此代码

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

0

你需要重写onOptionsItemSelected方法并检查菜单项的id,如果它等于home按钮的id,就调用onBackPressed方法。

@Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                onBackPressed();
            }
            return super.onOptionsItemSelected(item);
        }

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

0

在onCreate()中启用ActionBar返回按钮

 if (getSupportActionBar() != null){
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setTitle("Streaks");
        }

重写返回按钮按下方法

@Override
    public void onBackPressed() {
        super.onBackPressed();
    }

覆盖方法

 @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        onBackPressed();
        return true;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接