Android: RuntimeException с PreferenceScreen и пользовательскими атрибутами из библиотечного проекта - PullRequest
0 голосов
/ 29 сентября 2011

Я недавно разделил свой проект и создал проект библиотеки и основной проект. Имея экран настроек с настраиваемыми атрибутами, я удалил настройки с настраиваемыми атрибутами из моего файла preferences.xml, поместил их в свои собственные XML-файлы, включил их обратно в файл preferences.xml и переопределил отдельные файлы в основном проекте ( Процесс подробно описан в ответе на другой вопрос здесь .

Проект собран и запущен правильно. Тем не менее, я получаю RuntimeException всякий раз, когда я пытаюсь открыть экран настроек. Удаление префов с помощью пользовательских атрибутов устраняет проблему, поэтому я проследил ее до конца. К сожалению, в этом исключении нет полезной информации.

attrs.xml (существует в проекте lib)

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="numberpickerPref">
    <attr name="maxValue" format="integer" />
    <attr name="minValue" format="integer" />
</declare-styleable>
</resources>

preferences.xml (также в проекте lib)

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory android:title="@string/pref_VibrationSettingsTitle">
        <CheckBoxPreference android:key="@string/pref_vibrateFlagKey" 
            android:title="@string/pref_VibrateTitle" 
            android:summary="@string/pref_VibrateSummary"
            android:defaultValue="false" />

        <include layout="@layout/pref_vibrate_on" />
        <include layout="@layout/pref_vibrate_off" />
    </PreferenceCategory>
</PreferenceScreen>

pref_vibrate_off.xml (определено как в lib, так и в основных проектах) (только diff - это мое пространство имен, одно указывает на lib, другое - на главный проект)

<?xml version="1.0" encoding="utf-8"?>
<!-- Stupid workaround because Android still has a bug where custom attributes in a library cause the executable project
problems when building: 
/3395450/pomogite-s-polzovatelskimi-atributami-prosmotra-v-proekte-biblioteki-android -->

<com.me.numberpicker.NumberPickerPreference 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:my="http://schemas.android.com/apk/res/com.me.myapp.lib"
    android:key="@string/pref_vibrateOffPeriodKey" 
    android:title="@string/pref_VibrateOffTitle" 
    android:summary="@string/pref_VibrateOffSummary"
    my:maxValue="@string/MaxVibratorOffPeriodInS" 
    my:minValue="@string/MinVibratorOffPeriodInS"
    android:defaultValue="@string/DefaultVibratorOffPeriodInS" />

MyPreferencesActivity.java

public class MegalarmPreferencesActivity extends PreferenceActivity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

Все строки правильно определены в проекте lib.

Если я что-то упустил, дайте мне знать, пожалуйста. Настройки работали нормально, пока я не разделил свой проект на lib и main.

Большое спасибо! Шон

1 Ответ

0 голосов
/ 08 декабря 2011

PreferenceActivity.onCreate может создавать внутренние RuntimeExceptions, которые IDE может перехватить (если настроено для этого), но они также перехвачены внутри.Например, отсутствующий тег layout_width в теме по умолчанию, кажется, вызывает исключение.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...