Android返回按钮无法返回到上一个活动页面

11

我有一个应用程序,其中包含两个活动:MainActivity和SettingsActivity。 MainActivity具有带有单个“设置”菜单项的菜单。当单击此菜单项时,它会使用意图启动SettingsActivity。在活动启动后,我单击左上角的返回按钮,但没有任何反应。我认为由于我使用意图启动了活动,活动堆栈将自动管理。我想返回MainActivity。我的假设是错误的吗?

MainActivity.onMenuItemSelected

public boolean onMenuItemSelected(int featureId, MenuItem item) {
    int itemID = item.getItemId();

    if(itemID == R.id.settings) {
        Intent intent = new Intent(this, SettingsActivity.class);
        startActivity(intent);
    }

    return true;
}

设置活动

public class SettingsActivity extends PreferenceActivity {

    public static final String TEST = "test";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

请问您能否添加这两个活动的完整代码? - Mr.Me
你的意思是在ActionBar中点击应用程序图标,但什么也没有发生? - patheticpat
请问您能否同时添加清单文件(manifest)?您只需添加活动(activity)的标签即可。 - Nativ
2个回答

38

在您的SettingsActivity中,您需要重写onOptionsItemSelected以启用位于操作栏左上角的返回按钮,以进行后退。它本身不知道需要在单击时执行什么操作。在case android.R.id.home中,您只需调用finish()即可。这将完成当前活动,并返回到启动它的MainActivity。例如:

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

为了完整起见,如果要启用Home键,您可以在SettingsActivityonCreate()中添加以下内容:

getActionBar().setDisplayHomeAsUpEnabled(true);

根据setDisplayHomeAsUpEnabled()文档,此方法用于向用户显示选择主页将返回上一级而不是应用程序顶层的信息。希望这可以帮助您。

在SettingsActivity的onOptionsItemSelected方法中,我没有看到this.finish()。 - nurettin
这对我的情况非常有效,因为我通过上下文菜单导航到一个活动时,向上按钮无法正常工作。 - Kat
1
正在开发Android 4.4.4版本,尚未在更高的API上进行测试。 - barnacle.m

2
只需在您的OnCreate方法中添加这些行即可。
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

覆盖此方法以添加功能到你的后退按钮:

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

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    } else if(id==android.R.id.home)
    {
     finish();
        return true;
    }

    return super.onOptionsItemSelected(item);
}

希望能对您有所帮助。

在AndroidManifest中指定父活动是关键,如果没有它,这个解决方案和Shobhit的解决方案都不会起作用。 - Juan Alonso

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