Android:PreferenceFragment仅显示第一个首选项

时间:2016-12-15 19:17:22

标签: android sharedpreferences android-preferences preferencefragment preferencescreen

我在Android中加载PreferenceFragment时遇到问题。在这一点上,它是一个非常基本的实现,我希望稍后在它工作时进行扩展。

问题是导航到SettingsFragment后只显示第一个首选项。

我没有收到任何错误,但是logcat向我展示了这个:

W/PathParser: Points are too far apart 4.000000596046461

我搜索了这个,但没有任何有用的解决方案。

代码如下:

通过NavigationDrawer进行MainActivity导航

navigate()是使用FragmentManager

的通用函数
case R.id.nav_settings:
    navigate(new SettingsFragment(), "settingsFragment", false);
    break;

SettingsFragment

public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
    public SettingsFragment() { }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }

    @Override
    public void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onPause() {
        super.onPause();
        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) { }
}

prefences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <SwitchPreference
        android:key="switch_notifications"
        android:title="Notifications"
        android:summary="Receive notifications"
        android:defaultValue="true" >

    </SwitchPreference>

    <CheckBoxPreference
        android:key="switch_notifications2"
        android:title="Notifications"
        android:summary="Receive notifications"
        android:defaultValue="true" >

    </CheckBoxPreference>

</PreferenceScreen>

截图

左:实际输出|右:预览

Actual output Preview

提前致谢!

尼尔斯

2 个答案:

答案 0 :(得分:2)

很抱歉,这可能不是一个答案(暂无法发表评论),更像是洞察力。 只是想指出它在我的设备(oneplus3)上运行正常,并且在nexus 5模拟器中似乎也正常显示。

我的猜测:可能是某种程度上父活动限制了片段的输出?例如,如果我在父级上设置足够高的paddingBottom,我会得到与左图中类似的结果。

如果没有,它可能是一些奇怪的设备特定错误。也许你可以提供有关设备,屏幕尺寸,Android版本等的更多信息。

答案 1 :(得分:2)

找到解决方案:

包含NestedScrollView的{​​{1}}的设置应为FrameLayout。另外,FrameLayout的高度应设置为wrap_content。

android:fillViewport="true"