Java 在活动中显示和隐藏设置片段
所以我跟着。他们建议使用片段向用户显示设置 我创建了xml、字符串和片段: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
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
。例如,在您的情况下,我将创建一个设置活动。当有人单击应用程序中的设置选项时,您将打开此设置活动
,并在片段中显示此活动
中的设置。如果您有多个设置页面,您可以使用多个片段
来浏览此活动中的设置页面。但是如果您有一个附加的详细视图,您可以创建一个附加的活动
。规则是,如果您深入使用的层次结构,则需要另一个活动
如果您停留在同一级别,则需要另一个片段
。