也许这个问题被问了百万次。但经过百万次尝试后我仍然出错。
我用它来设置首选项
PreferenceFragment fragment;
try {
getClass().getMethod("getFragmentManager");
AddResourceApi11AndGreater();
} catch (NoSuchMethodException e) { //Api < 11
AddResourceApiLessThan11();
}
@SuppressWarnings("deprecation")
protected void AddResourceApiLessThan11()
{
addPreferencesFromResource(prefs);
}
@TargetApi(11)
protected void AddResourceApi11AndGreater()
{
PreferenceFragment fr = new PF();
fragment = fr;
getFragmentManager().beginTransaction().replace(android.R.id.content, fr).commit();
}
@TargetApi(11)
public static class PF extends PreferenceFragment
{
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(AyarlarScreen.prefs);
}
}
我仍然从 findPreference 和 fragment.findPreference 得到 null
(我是 4.0.4 android。所以它使用 Api11andGreter。所以我保存片段 ref,然后使用它来获取首选项。如果我手动使用 api11andlower,我可以获得偏好)