Как создать пользовательскую настройку SeekBar? - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь создать пользовательскую настройку панели поиска, но Android не может найти элемент.Я получаю

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setVisibility(int)' on a null object reference at
    at android.support.v7.preference.SeekBarPreference.onBindViewHolder(SeekBarPreference.java:154)

, когда пытаюсь получить доступ к настройке.Причина, по-видимому, заключается в том, что он не может найти мой пользовательский элемент панели поиска и связать его с предпочтением.Обычно я бы назвал элемент пользовательского предпочтения что-то вроде @android:id/seekbar, чтобы заставить работать связь, но когда дело доходит до SeekBar, он говорит, что это личное.Я попытался @+id/seekbar согласно Android: создание пользовательской настройки , но, похоже, не получается привязать мою пользовательскую панель поиска к настройке.

Вот мой код:

Предпочтительный XML

<android.support.v7.preference.SeekBarPreference
            android:key="my_seekbar_preference"
            android:layout="@layout/seekbar_preference"
            android:max="10"
            android:defaultValue="5" />

Схема SeekBar

<?xml version="1.0" encoding="utf-8"?>
<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="wrap_content"
android:orientation="vertical"
android:layout_margin="@dimen/half_normal">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/half_normal"
    android:layout_marginLeft="@dimen/normal"
    style="@style/SettingsSubHeader"
    android:text="Seekbar Settings"/>

<SeekBar
    android:id="@+id/seekbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/Widget.AppCompat.SeekBar.Discrete"
    android:max="10"
    android:min="0"/>

</LinearLayout>

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

1 Ответ

0 голосов
/ 06 апреля 2019

Похоже, проблема заключается в том, что в дополнение к моей пользовательской компоновке, требующей элемента Seekbar, помеченного @+id/seekbar, ему также необходим элемент Textview, помеченный @+id/seekbar_value, для отображения текущего значения панели поиска. Если это отсутствует, я получаю исключение нулевого указателя. Если я добавлю один, все работает нормально:

<TextView
    android:id="@+id/seekbar_value"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

Также обратите внимание, что настройка android:visibility="gone" в этом случае не работает, поэтому, если вы не хотите отображать значение, вам нужно установить android:textSize="0dp, чтобы скрыть его.

...