Java 在活动中显示和隐藏设置片段

Java 在活动中显示和隐藏设置片段,java,android,android-fragments,android-fragmentactivity,android-settings,Java,Android,Android Fragments,Android Fragmentactivity,Android Settings,所以我跟着。他们建议使用片段向用户显示设置 我创建了xml、字符串和片段: public class SettingsFragmentApp extends PreferenceFragment{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.x

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

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

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

        addPreferencesFromResource(R.xml.preferences_app);
    }
}
我想在我的MainActivity页面上显示这一点,而不创建另一个仅承载此片段的活动(我认为google推荐的后面的选项扼杀了这一点……为什么我要为一个片段创建另一个活动?)。因此,我在
菜单中添加了一个选项,并在
main活动中这样处理它:

        //inside onOptionsItemSelected(MenuItem item)
        case (R.id.action_settings_user):
            getFragmentManager().beginTransaction().replace(android.R.id.content,
                    new SettingsFragmentUser()).commit();
            return true;
这样,设置片段会按预期显示,但只要用户点击后退按钮,应用程序就会退出,因为它仍然处于
MainActivity
状态


因此,问题是如何处理后退按钮,使其保存设置更改并将用户带回MainActivity?

如果需要后退按钮功能,则必须将
片段添加到事务中的后堆栈中

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

但不建议这样做。他们建议您使用额外的
活动
的原因是,您可以使用
活动
而不是片段构建导航堆栈。使用
片段构建导航堆栈很快就会出现问题<代码>活动
应该是
片段
的容器。因此,在任何应用程序中,您都将有许多
活动
,这些活动除了
片段
之外不包含任何内容,而这些
活动
仅用于构建导航堆栈。在真正大型的应用程序中,我倾向于编写一个抽象的基础
活动
,实现您需要的所有基本功能,并尽可能多地在
活动
上重用它。

谢谢,您的意思是,如果我有许多不同的设置片段,我只需一个活动就可以处理它们?如果是这样,您可以共享派生的活动代码吗?我的意思是,您不应该将
片段添加到后台堆栈中,而应该为应用程序导航层次结构中的每个级别创建
活动。对于同一级别的内容,您可以使用
FragmentTransactions
。例如,在您的情况下,我将创建一个
设置活动
。当有人单击应用程序中的设置选项时,您将打开此
设置活动
,并在
片段中显示此
活动
中的设置。如果您有多个设置页面,您可以使用多个
片段
来浏览此
活动中的设置页面。但是如果您有一个附加的详细视图,您可以创建一个附加的
活动
。规则是,如果您深入使用的层次结构,则需要另一个
活动
如果您停留在同一级别,则需要另一个
片段