В настоящее время я много изучаю о приложениях для Android и мало что знаю о пользовательских элементах предпочтений.
Поэтому я попытался посмотреть в Интернете, а затем сделал свой код:
package com.corrupted.radheat.TEMPER
import android.content.Context
import android.content.res.TypedArray
import android.support.v7.preference.DialogPreference
import android.support.v7.preference.Preference
import android.util.AttributeSet
import android.view.View
import android.widget.NumberPicker
class NumericPreference @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.dialogPreferenceStyle, defStyleRes: Int = defStyleAttr) : DialogPreference(context, attrs, defStyleAttr, defStyleRes){
private var mWidget: NumberPicker? = null
private var value = DEFAULT_VALUE
init {
dialogLayoutResource = R.layout.bumberpref_pickertest
}
protected fun onBindDialogView(view: View) {
mWidget = view.findViewById(R.id.picker) as NumberPicker
mWidget!!.minValue = 0
mWidget!!.maxValue = 10
mWidget!!.value = value
}
override fun onGetDefaultValue(a: TypedArray, index: Int): Any {
return a.getInteger(index, DEFAULT_VALUE)
}
override fun onSetInitialValue(restorePersistedValue: Boolean, defaultValue: Any) {
if (restorePersistedValue) {
value = getPersistedInt(DEFAULT_VALUE)
} else {
value = defaultValue as Int
persistInt(value)
}
}
fun onDialogClosed(positiveResult: Boolean) {
if (positiveResult) {
value = mWidget!!.value
persistInt(value)
}
}
companion object {
private const val DEFAULT_VALUE = 0
}
}
Но мои пользовательские элементы не работают без функции onDisplayPreferenceDialog, которую я понятия не имею, как написать, поэтому я скопировал / вставил уже работающую функцию Java, но есть много устаревших материалов (самые последние уроки были сделаны за 3 года) назад) и некоторые функции были объявлены устаревшими на последнем API
так что кто-то может помочь мне с обновлением этой функции
fun onDisplayPreferenceDialog(preference: Preference) {
if (preference is NumericPreference) {
val dialogFragment = DialogPrefFragCompat.newInstance(preference.key)
dialogFragment.setTargetFragment(this, 0)
dialogFragment.show(getSupportFragmentManager(), null)
} else
super.onDisplayPreferenceDialog(preference)
}