我是否必须制作新活动才能使用设置片段?

时间:2016-05-10 00:10:37

标签: android android-fragments

我正在关注此页https://developer.android.com/guide/topics/ui/settings.html

中的偏好片段解决方案

以下是使用的代码:

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

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.preferences);
}
...
}

public class SettingsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Display the fragment as the main content.
    getFragmentManager().beginTransaction()
            .replace(android.R.id.content, new SettingsFragment())
            .commit();
}
}

这个解决方案有效但在我这样做之前我尝试了不同的东西。

首先,我尝试在不使用SettingsActivity的情况下打开“设置”。我想在我的主要活动中使用Settings Fragment切换我的主片段(此代码在我的MainActivity文件中):

 public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();
        fragmentTransaction.replace(R.id.container, new SettingsFragment());
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();

        return true;
    }

    return super.onOptionsItemSelected(item);
}

这个R.id.container是我的activity_main.xml

中的FrameLayout
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:ignore="MergeRootFrame" >

</FrameLayout>

这种方法似乎不起作用,为什么?设置片段遍历当前片段,因为当前片段未被替换。

如果我选择使用菜单片段进行新活动,会有什么性能损失?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的代码看起来不错,但您可以试试这个

FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager
            .beginTransaction();
    fragmentTransaction.replace(android.R.id.content, new SettingsFragment());
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();

android.R.id.content为您提供视图的根元素,而无需知道其实际名称,类型或ID。