Intereting Posts
Очистка полного стека активности Android на старых SDK (у которых отсутствует FLAG_ACTIVITY_CLEAR_TASK) V.getTag () возвращает null вместо ViewHolder Широковещательный приемник для обнаружения запуска приложения TextView отключает текст, когда он достаточно длинный Невозможно преобразовать в цвет: type = 0x2 ошибка при раздувании макета в фрагменте, но только на Samsung Galaxy и Note 4 Android создает spinner с элементами, которые имеют скрытое значение и отображают некоторый текст? API Карт Google v2: как сделать маркеры доступными для кликов? Android: обнаружит, когда GPS включен / выключен (или когда приложение больше не использует его) Значения локализации Android – ** имена папок Найти drawable с помощью строки Использовать внешние шрифты в android Как масштабировать веб-сайт для мобильных устройств? Crossfading с использованием TransitionDrawable, не работающего на android Как добавить библиотеку picasso в андроид-студию Ошибка компиляции студии Android «Содержимое не допускается в прологе»

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

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

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

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

Solutions Collecting From Web of "Как вы создаете Preference Activity и Preference Fragment на Android?"

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

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

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


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

  • Создайте класс 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 вашего проекта)

     <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="FOO"> <CheckBoxPreference android:key="checkBoxPref" android:title="check it out" android:summary="click this little box"/> </PreferenceCategory> </PreferenceScreen> 

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


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

  • Создайте класс PreferenceActivity

    MyPreferenceActivity

     public class MyPreferenceActivity extends PreferenceActivity { @Override public void onBuildHeaders(List<Header> 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<Header> target) мы загружаем еще один XML-файл, содержащий заголовки предпочтений. Короче говоря, заголовки – это левая часть предпочтения, а фрагмент – правильная часть (для планшета). Для телефона сначала будут заголовки, и когда вы нажмете на элемент, соответствующий фрагмент будет помещен поверх списка заголовков.

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

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

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

     <?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> <header android:fragment="your.package.MyPreferenceFragment" android:title="Goto: Preference fragment" android:summary="An example of some preferences." /> </preference-headers> 

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

    android:fragment="your.package.MyPreferenceFragment"

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


3. Android Manifest

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

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

 <activity android:name="your.package.MyPreferenceActivity" android:label="Preferences"> </activity> 

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

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

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


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

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

  • Меню

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

     <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/preferences" android:title="Preferences" /> </menu> 

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

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

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

    Для этого вам необходимо переопределить метод 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

     <resources> <string-array name="listArray"> <item>Ace</item> <item>Club</item> </string-array> <string-array name="listValues"> <item>Ace</item> <item>Club</item> </string-array> </resources> 
  2. Добавить /res/xml/preferences.xml

     <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <EditTextPreference android:title="Your Name" android:key="username" android:summary="Please provide your username"></EditTextPreference> <CheckBoxPreference android:title="Application Updates" android:defaultValue="false" android:summary="This option if selected will allow the application to check for latest versions." android:key="applicationUpdates" /> <ListPreference android:title="Download Details" android:summary="Select the kind of data that you would like to download" android:key="downloadType" android:defaultValue="Ace" android:entries="@array/listArray" android:entryValues="@array/listValues" /> </PreferenceScreen> 
  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); } }