我正在关注此页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>
这种方法似乎不起作用,为什么?设置片段遍历当前片段,因为当前片段未被替换。
如果我选择使用菜单片段进行新活动,会有什么性能损失?
感谢您的帮助。
答案 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。