繁体   English   中英

在活动中显示和隐藏SettingsFragment

[英]Showing and hiding SettingsFragment in an activity

因此,我在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?

如果要使用后退按钮功能,则必须将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上重用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM