Подтвердить что ты не робот

Отдельная страница PreferenceActivity без заголовков/фрагментов?

Я пытаюсь выполнить что-то, что, по-моему, довольно просто, но я не понимаю, как это сделать, используя класс PreferenceActivity и тег заголовка предпочтения xml.

Когда пользователь нажимает значок настроек приложения, я хотел бы, чтобы они были представлены небольшим списком флажков и списков. У меня есть только один фрагмент предпочтений. Пока я могу настроить XML файлы PreferenceActivity (preferences.xml и фрагменты предпочтений xmls), чтобы показать один заголовок для фрагмента предпочтений. Когда пользователь выбирает этот заголовок, экран настроек является именно тем, как я его хочу, однако я не могу понять, как пропустить отображение первого экрана заголовка.

Кажется, что тратить время на использование значка настроек/предпочтений, показывать один заголовок, который затем используется для получения фактических настроек/предпочтений.

Я понимаю, как это может быть очень полезно, если вы хотите классифицировать свои предпочтения, но для чего-то простого, это добавляет накладные расходы и кажется довольно неуклюжим.

Я надеюсь, что я был ясен. Короче, здесь мой вопрос:

Каков новый предпочтительный способ использования класса PreferenceActivity и тега заголовка предпочтения, чтобы просто показать один экран параметров без заголовка?

Оглянувшись еще немного, похоже, я пытаюсь сделать то, что старые методы сделали прямолинейно. Я пытаюсь сделать это без использования устаревших функций.

Спасибо заранее, Б.

4b9b3361

Ответ 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 в этом случае).

Что это.