繁体   English   中英

Android:使用导航抽屉的片段的首选片段

[英]Android: Preference Fragment with a Navigation Drawer's Fragment

嗨,我有一个已经使用导航抽屉的Android应用程序。 我的MainActivity扩展了Fragment Activity ,我的SettingFragment扩展了PreferenceFragment

设置片段

public class SettingsFragment extends PreferenceFragment {
    public SettingsFragment() {}

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

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

和我的MainActivity

PreferenceFragment preferenceFragment = new SettingsFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(android.R.id.content, preferenceFragment); // I'm getting an error here should be Fragment not PreferenceFragment
ft.commit();

我如何提交或转到SettingsFragment()?

用一个简单的片段包装你当前的PreferenceFragment,它注意到但是打开prefenceFragment,如下所示

public class SettingsActivity extends Fragment {

   @Override
    public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    getActivity().getFragmentManager().beginTransaction()
            .replace(android.R.id.content, new MyPreferenceFragment())
            .commit();
    }
    private class SettingsFragment extends PreferenceFragment {
      public SettingsFragment() {}

      @Override
      public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

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

这对我有用。 请记住,此代码适用于api leval 11及更高版本。

在Activity中使用此代码添加Fragment。

android.app.Fragment infoFragment = new InfoFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(android.R.id.content, infoFragment);
ft.commit();

而您的PreferenceFragment类将如下所示。

public class InfoFragment extends PreferenceFragment 
{
 /**
  * The fragment argument representing the section number for this
  * fragment.
 */
 private static final String ARG_SECTION_NUMBER = "section_number";

 /**
  * Returns a new instance of this fragment for the given section
  * number.
  */

  public static android.app.Fragment newInstance(int sectionNumber) 
  {
    InfoFragment fragment = new InfoFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_SECTION_NUMBER, sectionNumber);
    fragment.setArguments(args);
    return fragment;
  }

  public InfoFragment() 
  {

  }
}

这个怎么样:

Fragment preferenceFragment = new SettingsFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(android.R.id.content, preferenceFragment);
ft.commit();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM