Отдельная страница PreferenceActivity без заголовков/фрагментов?
Я пытаюсь выполнить что-то, что, по-моему, довольно просто, но я не понимаю, как это сделать, используя класс PreferenceActivity и тег заголовка предпочтения xml.
Когда пользователь нажимает значок настроек приложения, я хотел бы, чтобы они были представлены небольшим списком флажков и списков. У меня есть только один фрагмент предпочтений. Пока я могу настроить XML файлы PreferenceActivity (preferences.xml и фрагменты предпочтений xmls), чтобы показать один заголовок для фрагмента предпочтений. Когда пользователь выбирает этот заголовок, экран настроек является именно тем, как я его хочу, однако я не могу понять, как пропустить отображение первого экрана заголовка.
Кажется, что тратить время на использование значка настроек/предпочтений, показывать один заголовок, который затем используется для получения фактических настроек/предпочтений.
Я понимаю, как это может быть очень полезно, если вы хотите классифицировать свои предпочтения, но для чего-то простого, это добавляет накладные расходы и кажется довольно неуклюжим.
Я надеюсь, что я был ясен. Короче, здесь мой вопрос:
Каков новый предпочтительный способ использования класса PreferenceActivity и тега заголовка предпочтения, чтобы просто показать один экран параметров без заголовка?
Оглянувшись еще немного, похоже, я пытаюсь сделать то, что старые методы сделали прямолинейно. Я пытаюсь сделать это без использования устаревших функций.
Спасибо заранее,
Б.
Ответы
Ответ 1
Новый предпочтительный способ - показать единственный PreferenceFragment
в качестве основного содержимого любой активности. Это не должно быть PreferenceActivity
. См. Демонстрационный пример APIs
public class FragmentPreferences extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Display the fragment as the main content.
getFragmentManager().beginTransaction().replace(android.R.id.content,
new PrefsFragment()).commit();
}
public static class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
}
}
Ответ 2
Я искал ответ, который соответствовал этому вопросу. В конце концов, я отработал его из нескольких других источников. Для тех, кому все еще может потребоваться ответ, вот что для меня работало. (Примечание. И минимальные, и целевые SDK в этом проекте установлены в 15.)
- Сбросьте PreferenceHeaders, они вам не понадобятся.
- Создайте экран настроек с настройками одной страницы.
- Создайте класс активности предпочтений (SettingsActivity ниже).
- Создайте встроенный класс, расширяющий PreferenceFragment (LocationFragment ниже).
- Определите класс в манифесте.
- Запустите задачу - см. код меню ниже.
Класс предпочтений, отображающий экран одиночных настроек.
public class SettingsActivity extends PreferenceActivity {
private final static String TAG = "SettingsAcitivity";
public SettingsActivity() {}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyLog.d(TAG, "onCreate");
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new LocationFragment()).commit();
}
public class LocationFragment extends PreferenceFragment {
private final static String TAG = "LocationFragment";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyLog.d(TAG, "onCreate");
addPreferencesFromResource(R.xml.locationsettings);
}
}
}
Код для отображения настроек:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
MyLog.d(TAG, "onOptionsItemSelected");
switch (item.getItemId()) {
case R.id.menu_main_help:
break;
case R.id.menu_main_about:
break;
case R.id.menu_main_settings:
MyLog.d(TAG, "Settings");
Intent settingsIntent = new Intent(this, SettingsActivity.class);
startActivity(settingsIntent);
break;
}
return true;
}
Клавиша "Назад" завершает действие "Настройки". Введенные в настройках функции сохраняют любые изменения. В функции onResume у меня есть getSettings(), которая обновляет любые измененные параметры, используемые вызывающей активностью (MainActivity в этом случае).
Что это.