Как установить OnClickListener в PreferenceFragmentCompat для кнопки xml - PullRequest
0 голосов
/ 03 ноября 2018

Я новичок в Kotlin, и у меня есть этот простой PreferencesFragment, и у него есть пользовательский макет XML для кнопки. Кнопка показывает ОК в элементе Preferences. Теперь я хотел, чтобы это setOnClickListener на кнопке, но buttonView ниже - NULL. Чего мне не хватает Я думаю, что я делаю что-то не так с findViewById

Это @ layout / pref_category_sign_out_button

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_sign_out"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/buttonshape"
        android:text="@string/pref_category_sign_out_title" />
</LinearLayout>

Мои app_prefs

<?xml version="1.0" encoding="utf-8"?>
<preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <preference.PreferenceCategory
        android:layout="@layout/pref_category_text"
        android:title="@string/pref_category_sign_out_title">
        <preference.Preference
            android:key="@string/pref_key_category_signed_out"
            android:widgetLayout="@layout/pref_category_sign_out_button"
            android:title="@string/pref_category_sign_out_button_title"
            android:summary="@string/pref_category_sign_out_buttom_summ"/>
    </preference.PreferenceCategory>
</preference.PreferenceScreen>

My PreferenceFragmentCompat:

class PreferencesFragment : PreferenceFragmentCompat() {

    lateinit var activity: Context

    private var prefs: SharedPreferences = BleApplication.getInstance().getDefaultSharedPreferences()

    override fun onAttach(context: Context?) {
        super.onAttach(context)
        activity = requireActivity()
    }

    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        addPreferencesFromResource(R.xml.app_prefs)
        val buttonView = view.findViewById<Button>(R.id.btn_sign_out)

        if (buttonView != null) {
            buttonView.setOnClickListener {
                Toast.makeText(getActivity(), "You clicked me.", Toast.LENGTH_SHORT).show()
            }
        }
}
...