2015-01-23 2 views
0

Я пытаюсь загрузить экран предпочтений, но он, похоже, не отображается. Я могу загрузить Activity, но я не вижу никаких реальных настроек. Я попробовал другое решение на StackOverflow, например добавив setContentView(R.layout.activity_settings); в SettingsActivity, но не имел успеха.Фрагмент предпочтения, не показывающий предпочтений

SettingsActivity.java

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 

public class SettingsActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Display the fragment as the main content. 
     getFragmentManager().beginTransaction() 
       .replace(android.R.id.content, new SettingsFragment()) 
       .commit(); 
    } 

} 

preferences.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <PreferenceCategory 
     android:title="@string/pref_start" 
     android:key="pref_key_storage_settings"> 
     <CheckBoxPreference 
      android:key="pref_key_auto_exit" 
      android:summary="@string/pref_summary_exit" 
      android:title="@string/pref_title_exit" 
      android:defaultValue="false"/> 
    </PreferenceCategory> 
</PreferenceScreen> 

SettingsFragment.java

import android.os.Bundle; 
import android.preference.PreferenceFragment; 
import android.view.LayoutInflater; 
import android.view.ViewGroup; 

public class SettingsFragment extends PreferenceFragment { 

    public SettingsFragment() { 
    } 

    public void onCreate(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 
+0

Почему «android.R.id.content» не существует в моей текущей деятельности? Я думал, что «андроид.R.id.content» был корневым элементом активности? –

+0

Off topic: вы хотите выполнить транзакцию фрагмента только в том случае, если 'savedInstanceState == null'. Вам нужно сделать это только один раз, когда пользователь откроет активность. После того, как пользователь повернет экран, он останется загруженным. –

ответ

0

Поскольку ваша деятельность распространяется ActionBarActivity в свою очередь, расширяет FragmentActivity он может использовать только поддержку Fragment s и их d escendants. Однако PreferenceFragment сходит с родного Fragment. Даже если ваш минимальный SDK выше 11, эти два не могут взаимодействовать.

У вас есть два варианта:

1) Go родные предпочтения

Ваша деятельность будет лучше продлить PreferenceActivity. Затем вы можете продолжить использовать текущий PreferenceFragment. Недостатком является то, что вам придется обрабатывать стиль API 11+ (или 14+) и API 21+ отдельно (но это можно сделать). Full documentation on native preferences

2) ЛЕГКО: Перейти полную поддержку

Существует сообщество сделал портировать из PreferenceFragment (на самом деле есть несколько, но я использовал этот), которую можно найти здесь: https://github.com/kolavar/android-support-v4-preferencefragment

You должен быть способен скомпилировать сразу после импорта библиотеки в ваш проект и изменить оператор импорта, поэтому вместо import android.preference.PreferenceFragment; у вас будет import android.support.v4.preference.PreferenceFragment;.

Как решить

Если цель API ниже 11, и вы нуждаетесь в панели действий у вас нет выбора, кроме как вариант 2. Этот вариант также лучше, если вы не нужны PreferenceActivity сахара, как заголовки, (см. документы)

Смежные вопросы