11

我有一个有两个活动的应用程序:MainActivity 和 SettingsActivity。MainActivity 有一个带有单个 Settings 菜单项的菜单。单击此菜单项时,它会启动带有意图的 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);
    }
}
4

2 回答 2

38

在您的内部,您SettingsActivity需要覆盖onOptionsItemSelected以启用操作栏左上角的后退按钮以返回。它自己不知道点击时需要做什么。在机箱内,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);
    }

为了完整起见,要启用主页按钮,您可以在onCreate()of中添加以下内容SettingsActivity

getActionBar().setDisplayHomeAsUpEnabled(true);

根据setDisplayHomeAsUpEnabled()的文档

It is to show the user that selecting home will return one level up rather than to the top level of the app.

希望这可以帮助。

于 2013-07-14T20:22:07.827 回答
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);
}

希望对你有帮助

于 2016-04-26T15:11:25.280 回答