如何在基于android.support.v4.app.Fragment的ViewPager中添加PreferenceFragment?
这个问题我之前也碰到过!核心原因是你用的PreferenceFragment属于android.app包下的Fragment,和你ViewPager里依赖的android.support.v4.app.Fragment不是同一个体系,类型不匹配所以报错。下面给你一步步解决的方案:
解决步骤
1. 切换到PreferenceFragmentCompat
android.support.v4.app.Fragment体系对应的偏好设置Fragment是PreferenceFragmentCompat,它天生继承自v4的Fragment,能完美适配你的ViewPager。
2. 添加必要依赖
如果你的项目还没引入相关依赖,需要在**Module级别的build.gradle**里添加:
dependencies { // 针对support库的情况 implementation 'com.android.support:preference-v7:28.0.0' // 如果已经迁移到AndroidX,替换成这个 // implementation 'androidx.preference:preference:1.2.0' }
3. 修改你的PreferenceFragment类
把原来继承PreferenceFragment的代码改成继承PreferenceFragmentCompat,并重写onCreatePreferences方法加载你的偏好配置:
import android.support.v7.preference.PreferenceFragmentCompat; import android.os.Bundle; public class MySettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { // 加载你的偏好设置xml文件(放在res/xml目录下) setPreferencesFromResource(R.xml.preferences, rootKey); } }
4. 更新ViewPager的Adapter
现在MySettingsFragment已经是android.support.v4.app.Fragment的子类了,直接和另外两个Fragment一样加入Adapter即可:
import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; public class MyPagerAdapter extends FragmentStatePagerAdapter { private static final int PAGE_COUNT = 3; public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case 0: return new FirstFragment(); // 你的第一个v4 Fragment case 1: return new SecondFragment(); // 你的第二个v4 Fragment case 2: return new MySettingsFragment(); // 现在可以正常添加了 default: return null; } } @Override public int getCount() { return PAGE_COUNT; } @Override public CharSequence getPageTitle(int position) { // 按需设置每个页面的标题 switch (position) { case 0: return "页面1"; case 1: return "页面2"; case 2: return "设置"; default: return ""; } } }
额外注意点
- 如果你已经迁移到AndroidX,记得把所有support库的引用换成AndroidX对应的类(比如
androidx.fragment.app.Fragment代替android.support.v4.app.Fragment,androidx.preference.PreferenceFragmentCompat代替support v7版本)。 - 确保你的偏好设置xml文件放在
res/xml目录下,格式符合Preference的规范。
这样修改后,你的设置Fragment就能正常加入ViewPager,和其他Fragment一起滑动了!
内容的提问来源于stack exchange,提问作者user9132502
相关产品推荐
相关产品推荐

