在活动中显示和隐藏SettingsFragment

时间:2014-04-20 14:59:16

标签: java android android-fragments android-fragmentactivity android-settings

所以我跟着this guide on Android Developers。他们建议使用片段向用户显示设置。

我创建了xml和字符串以及片段:

public class SettingsFragmentApp extends PreferenceFragment{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.preferences_app);
    }
}

我想在我的MainActivity页面上显示这个,而不创建另一个只托管这个片段的活动(我认为google推荐的后来的optioon杀死了这一点......为什么我要为一个片段创建另一个活动?)。所以我在MENU添加了一个选项,我在MainActivity中这样处理:

        //inside onOptionsItemSelected(MenuItem item)
        case (R.id.action_settings_user):
            getFragmentManager().beginTransaction().replace(android.R.id.content,
                    new SettingsFragmentUser()).commit();
            return true;

这样设置片段就会按预期显示,但是一旦用户点击后退按钮,应用程序就会退出,因为它仍在MainActivity上。

所以问题是如何处理后退按钮以保存设置更改并将用户带回MainActivity?

1 个答案:

答案 0 :(得分:1)

如果你想要后退按钮功能,你必须在事务中将Fragment添加到后台。

FragmentManager manger = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.flFragmentContainer, fragment);
transaction.addToBackStack(null); // Add fragment to back stack.
transaction.commit();

但不建议这样做。他们建议您使用额外Activity的原因是您可以使用Activities而不是片段来构建导航堆栈。使用Fragments构建导航堆栈可能会很快出现问题。 Activities只是Fragments的容器。因此,在任何应用中,除了Activities之外,您将有许多Fragment不包含任何内容,而这些Activities仅用于构建导航堆栈。在非常大的应用程序中,我倾向于编写一个抽象基础Activity,它实现了您需要的所有基本功能,并尽可能在Activity上重复使用。