1

Я столкнулся с этой странной ошибкой:PreferenceFragment не работает после onCreateView

1 PregerenceFragment в нормальной деятельности. В фрагменте есть две SwitchPreferences. Сейчас все работает отлично. Но когда я переопределяю метод onCreateView, то эти переключатели действуют как одно из которых означает, что они всегда имеют одинаковое состояние - проверьте/снимите отметку с одного и того же.

Является ли это ошибкой или я что-то не так, пожалуйста?

Благодаря

предпочтение XML:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 

    <SwitchPreference 
     android:defaultValue="true" 
     android:key="@string/key_syncing_wifi" 
     android:title="123" /> 
    <SwitchPreference 
     android:defaultValue="false" 
     android:key="@string/key_syncing_carrier" 
     android:title="234" /> 

</PreferenceScreen> 

макет фрагмента XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" 
    tools:context=".PreferenceActivity" > 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_marginTop="10dp" 
     android:gravity="center" 
     android:text="123" /> 

</LinearLayout> 

фрагмент класса

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_preference, container, false); 
     return view; 
    } 

} 

ответ

0

Я не мог выкопать причину для этого конкретного поведения,но, по-видимому, устраняет проблему:

  1. Удалить onCreateView().
  2. Добавьте layout_preference.xml макет непосредственно в файл preference.xml.

preference.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

    <SwitchPreference 
     android:defaultValue="true" 
     android:key="@string/key_syncing_wifi" 
     android:title="123" /> 
    <SwitchPreference 
     android:defaultValue="false" 
     android:key="@string/key_syncing_carrier" 
     android:title="234" /> 

    <Preference android:layout="@layout/fragment_preference" /> 

</PreferenceScreen> 

Кроме того, не такое поведение не наблюдается при CheckBoxPreference.

Надеюсь, это поможет.

+0

HI, Как получить представление о добавленном предпочтении в 'oncreatemethod'? – Naruto

+0

Здравствуйте @Naruto! К сожалению, я не вижу никакого отношения к ОП. Думаю, это заслуживает отдельного вопроса. – ozbek