我正在尝试在我的应用程序中添加PreferenceFragment
。问题是,它会自动置于我的NavigationDrawer
。
public class SetPreferenceActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
navigationDrawer(); // Loads the NavigationDrawer
getFragmentManager().beginTransaction().replace(android.R.id.content,
new Settings()).commit();
}
如您所见,我加载“SettingsFragment”并用它替换内容? (我不确定)但它把它置于其他一切之上..这是我的设置片段。
public class Settings extends PreferenceFragment {
static final String TAG = "MAIN";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
一切都按预期工作,但PreferenceFragment被加载到前面,掩盖了NavigationDrawer的滑动,我试着在listview上调用bringToFront();
,没有运气。
参考图片:
是否可以告诉片段加载到listview后面?我还想在ViewPager中加载片段,但是我得到一个错误,即Pager Adapter不接受PreferenceFragment类型的片段。
答案 0 :(得分:6)
请勿替换android.R.id.content
,使用包含FrameLayout
的布局中的DrawerLayout
ID。
答案 1 :(得分:0)
除了adneal所说的(如果其他人有同样的问题):
如果您使用NavigationDrawer 扩展活动,则调用PreferenceFragment的Activity需要具有setContentView()
方法:
public class SetPreferenceActivity extends MyNavigationDrawer {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
getFragmentManager().beginTransaction().replace(R.id.drawer_frame_layout,
new Settings()).commit();
}
settings.xml
应该只包含FrameLayout:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
答案 2 :(得分:0)
我有同样的问题,我通过将 android.R.id.content 替换为 R.id.container 解决了这个问题。