片段放置在导航抽屉的顶部

时间:2014-03-19 00:11:14

标签: android android-layout android-fragments android-preferences

我正在尝试在我的应用程序中添加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类型的片段。

3 个答案:

答案 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 解决了这个问题。