Настройка Android PreferenceFragment не работает - PullRequest
3 голосов
/ 01 февраля 2012

В настоящее время для экранов предпочтений 2.x в каждой PreferenceActivity я добавляю строку setContentView(R.layout.activity_preferences);, чтобы иметь настраиваемый макет в моих действиях.

Файл макета Activity_preferences.xml выглядит следующим образом:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout style="@style/TitleBar">
        <ImageButton style="@style/TitleBarAction"
            android:src="@drawable/ic_title_home"
            android:onClick="onHomeClick" />

        <ImageView style="@style/TitleBarSeparator" />
        <eu.vranckaert.worktime.utils.view.CustomTextView
                style="@style/TitleBarText" android:text="@string/lbl_preferences_title"/>
    </LinearLayout>

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

</LinearLayout>

Для моего приложения 3.x и выше я строю настройки в соответствии с приведенным ниже примером: http://developer.android.com/reference/android/preference/PreferenceActivity.html.

Чтобы применить тот же макет к моему приложению 3.x, я попытался добавить setContentView(..) в 3.x PreferenceActivity.

Результат на телефоне: отлично работает при первом действии, затем при загрузке фрагмента (с реальными предпочтениями в них) мой стиль не применяется

Результат на планшете: сбой:

    ERROR/AndroidRuntime(2208): FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{eu.vranckaert.worktime/eu.vranckaert.worktime.activities.preferences.PreferencesICSActivity}: java.lang.IllegalArgumentException: No view found for id 0x10202d4 for fragment TimeRegistrationsPreferencesFragment{4101ed38 #0 id=0x10202d4}
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
    at android.app.ActivityThread.access$600(ActivityThread.java:123)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4424)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.IllegalArgumentException: No view found for id 0x10202d4 for fragment TimeRegistrationsPreferencesFragment{4101ed38 #0 id=0x10202d4}
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:822)
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
    at android.app.BackStackRecord.run(BackStackRecord.java:622)
    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
    at android.app.Activity.performStart(Activity.java:4474)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1929)
    ... 11 more

Когда я пытаюсь применить файл макета к моим фрагментам, используя getActivity().setContentView(R.layout.activity_preferences);, получается: для телефона: активность все равно отображается нормально, при переходе в категорию вылетает:

    ERROR/AndroidRuntime(1320): FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{eu.vranckaert.worktime/eu.vranckaert.worktime.activities.preferences.PreferencesICSActivity}: java.lang.IllegalArgumentException: No view found for id 0x10202d4 for fragment DateTimePreferencesFragment{412a0d78 #0 id=0x10202d4}
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
    at android.app.ActivityThread.access$600(ActivityThread.java:123)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4424)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.IllegalArgumentException: No view found for id 0x10202d4 for fragment TimeRegistrationsPreferencesFragment{412a0d78 #0 id=0x10202d4}
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:822)
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
    at android.app.BackStackRecord.run(BackStackRecord.java:622)
    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
    at android.app.Activity.performStart(Activity.java:4474)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1929)
    ... 11 more

для планшета: тот же сбой, что и раньше ...

Как мне применить этот файл макета к моей активности фрагмента ...? Или я должен создать новый файл макета?

...