0

所以我遵循了 Android Developers 上的这个指南。他们建议使用片段向用户显示设置。

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

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

        addPreferencesFromResource(R.xml.preferences_app);
    }
}

我想在我的 MainActivity 页面上显示这个而不创建另一个只托管这个片段的活动(我认为谷歌推荐的后一个选项会扼杀点......为什么我应该只为一个片段创建另一个活动?)。所以我添加了一个选项,MENU我在下面这样处理它MainActivity

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

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

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

4

1 回答 1

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

但这不推荐。他们建议您使用 extra 的原因是您可以使用而不是片段Activity来构建导航堆栈。Activities构建导航堆栈Fragments很快就会出现问题。Activities应该是Fragments. 因此,在任何应用程序中,您都会有许多Activities不包含任何内容的应用程序Fragment,这些Activities仅用于构建导航堆栈。在非常大的应用程序中,我倾向于编写一个抽象的基础Activity来实现您需要的所有基础功能,并Activity尽可能多地重用它。

于 2014-04-20T15:04:19.810 回答