我的PreferenceScreen
中有一些嵌套的PreferenceActivity
,在它们下面有一系列的CheckBoxPreference
。
一切正常,但是无论何时旋转设备,PreferenceActivity都会返回到主PreferenceScreen
,而无需考虑用户所在的嵌套偏好设置屏幕。
这与前面的这些SO问题完全相同,在该问题中,解决方案是向PreferenceScreen添加一个键:
When my PreferenceActivity rotates, it does not remember which PreferenceScreen was open
How to prevent quitting from inner preference screen when there's a configuration change
Nested Preference Screen closes on Screenorientation change in Android
我已将密钥添加到我的所有PreferenceScreen中,并且该解决方案有效,只要我使用不赞成使用的方式即可:
public class Settings extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
}
问题是我正在使用PreferenceFragment
,就像this SO answer(还有here)一样。
代码:
public class Settings extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getFragmentManager().
beginTransaction().
replace(android.R.id.content, new MyPreferenceFragment()).
commit();
}
public static class MyPreferenceFragment extends PreferenceFragment
{
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
}
}
那么,如果可能,使用当前代码,如何在更改屏幕方向后如何保持内部PreferenceScreen打开?
我看到对于Google偏好设置now recommends AppCompatActivity和PreferenceFragmentCompat,但是我不希望只使用一个很小的细节就不要使用任何库,甚至不使用Google的库。
答案 0 :(得分:0)
当Android在API 11下时,这个小问题设法产生了三个SO问题,而在PreferenceFragment
被弃用时,在API 11和API 28之间没有一个问题(至少可以找到),我感到非常惊讶。
无论如何,我在Android- deprecated method warning regarding PreferenceActivity的答案中也找到了解决方案。
关键是要在添加if (savedInstanceState == null)
之前检查PreferenceFragment
,如下所示:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (savedInstanceState == null)
getFragmentManager().
beginTransaction().
replace(android.R.id.content, new MyPreferenceFragment()).
commit();
}
现在,只要设置了android:key
值,嵌套的PreferenceScreen就会在屏幕方向改变时保持打开状态。