位于导航抽屉上方的碎片

3

我正在尝试在我的应用程序中添加一个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 slideout。我尝试在listview上调用bringToFront();,但没有成功。
参考图片:

有可能让fragment在listview后面加载吗? 我也想过在ViewPager中加载片段,但出现错误,Pager适配器不接受PreferenceFragment类型的片段。
3个回答

6
不要替换android.R.id.content,而是使用包含DrawerLayout的布局中你所拥有的FrameLayout的id。

1
谢谢!运行得非常顺利。 - chriskvik
1
为什么导航抽屉的教程页面上没有相应的文档说明呢?感谢! - sonictt1
1
谢谢adneal。省了很多时间! - vidulaJ

0

我曾经遇到同样的问题,通过将 android.R.id.content 替换为 R.id.container 解决了它。


0
除了adneal所说的(以防其他人有同样的问题):
调用PreferenceFragment的Activity需要具有setContentView()方法,如果您使用NavigationDrawer扩展Activity,则需要该方法:
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"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接