Не удается найти предпочтения для пользовательских предпочтений в PreferenceActivity - PullRequest
3 голосов
/ 03 января 2012

Я сделал пользовательский макет предпочтений, который имеет 2 переключателя на строку, называемый dualtogglepreference. Наряду с классом, который расширяет Preference, который обрабатывает некоторые особенности для него. Когда я добавляю это пользовательское предпочтение в свой файл предпочтений.xml, оно появляется в пользовательском интерфейсе, но я не могу ссылаться на него, используя findPreference в действии предпочтений.

файл предпочтений.xml

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

    <com.hitpost.testing.DualTogglePreference
        android:key="followsMe"
        android:title="Someone follows me"
        android:layout="@layout/dualtogglepreference"/>

</PreferenceCategory>
</PreferenceScreen>

PreferenceActivity

public class TestingCustomPreferenceActivity extends PreferenceActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);

    DualTogglePreference followsMe = (DualTogglePreference) findPreference("followsMe");

    if (followsMe != null)
        Log.e("FOLLOWS_ME", "NOT NULL");
    else
        Log.e("FOLLOWS_ME", "NULL"); //THIS IS PRINTED
}
}

Визуально все выглядит отлично, то есть верстка для виджета правильная. Пожалуйста, помогите, боролись с этим в течение последнего дня.

1 Ответ

2 голосов
/ 09 июля 2014

В моем случае я забыл определить конструктор, который будет использоваться инфлятором.

public class StaticDialogPreference extends DialogPreference {
    // this constructor is called by the infaltor
    public StaticDialogPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public StaticDialogPreference(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init() {
        setDialogMessage(getContext().getString(R.string.static_message));
        setNegativeButtonText(null);
    }
}
...