Как вы создаете Preference Activity и Preference Fragment на Android?

Поскольку я следил за старым учебником ( Créez des applications for for Android -> openclassroom ), я застрял на этом устаревшем методе addPreferencesFromResource(int id) из classа PreferenceActivity.

Поэтому мой вопрос:

Каков новый способ создания настроек в Android?

Я нашел это сообщение ( что использовать вместо «addPreferencesFromResource» в PreferenceActivity? ), Которые помогают мне понять, что вам нужно пройти через PreferenceFragment , чтобы это сделать.

В следующем объяснении я использую your.package. просто чтобы показать, что вы должны поместить имя пакета. У каждого есть свой собственный пакет, поэтому, пожалуйста, замените его на свой пакет.

давай начнем :


1. Фрагмент предпочтения

  • Создайте свой class PreferenceFragment

    MyPreferenceFragment

     public class MyPreferenceFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.fragment_preference); } } 

  • Затем связанный ресурс xml

    fragment_preference.xml (в папке res / xml вашего проекта)

           

    Это все для части Fragment .


2. Предпочтение

  • Создайте class PreferenceActivity

    MyPreferenceActivity

     public class MyPreferenceActivity extends PreferenceActivity { @Override public void onBuildHeaders(List
    target) { loadHeadersFromResource(R.xml.headers_preference, target); } @Override protected boolean isValidFragment(String fragmentName) { return MyPreferenceFragment.class.getName().equals(fragmentName); } }

    Не забудьте переопределить isValidFragment(String fragmentName) поскольку вы получите перфоманс в своем приложении! 😉 Более серьезно я понятия не имею, зачем вам это нужно, но это необходимо. Если у кого-то есть объяснение, я бы с удовольствием прочитал его 🙂

    РЕДАКТИРОВАТЬ :


    Благодаря kirtan403 я теперь знаю, зачем это необходимо: он должен быть установлен из-за ( инъекции фреймворка андроида ).


    Как вы можете видеть в onBuildHeaders(List

    target)

    мы загружаем еще один XML-файл, содержащий заголовки предпочтений. Короче говоря, заголовки – это левая часть предпочтения, а fragment – правильная часть (для планшета). Для телефона сначала будут заголовки, и когда вы нажмете на элемент, соответствующий fragment будет помещен поверх списка заголовков.

    Прочтите эту статью ( создание нескольких панелей на Android с помощью Fragments – Tutorial ), изображения сами объясняют.

  • Затем связанный ресурс xml

    headers_preference.xml (в папке res / xml вашего проекта)

       

    Как вы, возможно, заметили в разделе заголовка, у вас есть:

    android:fragment="your.package.MyPreferenceFragment"

    Это будет действовать как ссылка на fragment, который вы хотите показать. На планшете он загрузится с правой стороны и по телефону будет загружаться поверх текущего вида.


3. Android Manifest

Теперь вам нужно добавить свою активность в файл AndroidManifest.xml .

Внутри раздела application добавьте следующие строки:

   

Вы, вероятно, скажете мне:

«О, черт возьми, ты забыл поставить андроид: launchMode =« singleTask » в своей активности»

Но НЕ НАЙДИТЕ ЭТО, поскольку вы никогда не будете загружать свой fragment по телефону. Эта ошибка была решена великим человеком! Это ссылка на его блог ( предпочтения заголовка Android на маленьком экране / телефоне ).


4. Запустите настройки из меню

Наконец, вам нужно добавить возможность показать это предпочтение !! Для этого вам понадобятся 3 вещи:

  • Меню

    menu.xml (в папке res / menu вашего проекта)

         

  • Загрузка этого меню в основное действие (не PreferenceActivity) по методу onCreateOptionsMenu(Menu menu)

     @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } 

  • Запуск действия MyPreferenceActivity когда вы нажимаете на эту кнопку.

    Для этого вам необходимо переопределить метод onOptionsItemSelected(MenuItem item) в вашем основном onOptionsItemSelected(MenuItem item) .

     @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.preferences: { Intent intent = new Intent(); intent.setClassName(this, "your.package.MyPreferenceActivity"); startActivity(intent); return true; } } return super.onOptionsItemSelected(item); } 


Et voila les amis!

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

Я надеюсь, что этот пост поможет некоторым людям: D

Приветствия!

Мне понравилось решение из этого сообщения: http://alvinalexander.com/android/android-tutorial-preferencescreen-preferenceactivity-preferencefragment

.. потому что он кажется самым компактным для кого-то, которому просто нужно что-то очень простое и быстрое. Он имеет только один файл .java и два небольших xml-файла.

Конфигурация активности НАПОМИНАНИЯ

После добавления 3 файлов в ваш проект, не забывайте

A) Добавить файл Prefs Activity to Manifest
B) Добавьте способ запуска действия Prefs. Например, кнопка или пункт меню

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

  1. Добавить /res/values/array.xml

       Ace Club   Ace Club   
  2. Добавить /res/xml/preferences.xml

           
  3. Добавить код операции

     public class AppPreferenceActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit(); checkValues(); } public static class MyPreferenceFragment extends PreferenceFragment { @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } private void checkValues() { SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); String strUserName = sharedPrefs.getString("username", "NA"); boolean bAppUpdates = sharedPrefs.getBoolean("applicationUpdates",false); String downloadType = sharedPrefs.getString("downloadType","1"); String msg = "Cur Values: "; msg += "\n userName = " + strUserName; msg += "\n bAppUpdates = " + bAppUpdates; msg += "\n downloadType = " + downloadType; Toaster.shortDebug(msg); } } 
  • Фрагмент в ViewPager с использованием FragmentPagerAdapter пуст во второй раз
  • Борьба с fragmentом поддержки проигрывателя Youtube
  • Как добавить функцию «Назад» в WebView внутри fragmentа?
  • Полный рабочий пример сценария анимации с тремя fragmentами Gmail?
  • Actionbarsherlock + вкладки + несколько fragmentов?
  • Как изменить текст textView fragmentа из активности
  • Анимация fragmentации: слайд и слайд
  • Показать диалоговое окно с анимацией, растущей с точки
  • Одна активность и все остальные fragmentы
  • Android ViewPager получает текущий вид
  • Стандартный переход fragmentа не оживляющий
  • Давайте будем гением компьютера.