Я пытаюсь реализовать настройки с субэкранами, используя AppCompatActivity и support.v7.preference
В соответствии с документами каждый PreferenceScreen в другом PreferenceScreen функционирует как вспомогательный экран, и структура будет обрабатывать отображение его при нажатии. http://developer.android.com/guide/topics/ui/settings.html#Subscreens
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<!-- opens a subscreen of settings -->
<PreferenceScreen
android:key="button_voicemail_category_key"
android:title="@string/voicemail"
android:persistent="false">
<ListPreference
android:key="button_voicemail_provider_key"
android:title="@string/voicemail_provider" ... />
<!-- opens another nested subscreen -->
<PreferenceScreen
android:key="button_voicemail_setting_key"
android:title="@string/voicemail_settings"
android:persistent="false">
...
</PreferenceScreen>
<RingtonePreference
android:key="button_voicemail_ringtone_key"
android:title="@string/voicemail_ringtone_title"
android:ringtoneType="notification" ... />
...
</PreferenceScreen>
...
</PreferenceScreen>
Это работает отлично, используя native Activity, PreferenceFragment... но используя AppCompatActivity и PreferenceFragmentCompat, щелчок по элементу Preference просто выделяет его, но не открывает подэкран.
Я ничего не смог найти в этом чтении документов и кода... мне нужно реализовать любые дополнительные обратные вызовы?
EDIT: только для полноты...
Это работает и открывает вспомогательный экран:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new DemoPreferenceFragment())
.commit();
}
}
static public class DemoPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
}
Это не работает/открывает дополнительный экран:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content, new DemoPreferenceFragment())
.commit();
}
}
static public class DemoPreferenceFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.preferences);
}
}
}
Изменить: 25/01/2016
После того, как я провел несколько дней с поддержкой support.v7.preference, я подытожил свои выводы здесь, надеясь, что это может помочь другим: HowTo использовать support.v7.preference с AppCompat и потенциальными недостатками