【发布时间】:2020-11-06 21:18:58
【问题描述】:
我没有 java/kotlin/android 背景,并且已经尝试学习了一个星期。我卡在 Settings Activity Listeners
我使用 New > Activity > Settings Activity 创建了一个 Settings Activity,并添加了一个 SeekBar
但无论我尝试了什么,我都无法使 println("triggered") 部分工作
我做错了什么?解释的时候别忘了我是新手
谢谢
PS:API 级别为 21
SettingsActivity.kt
import android.os.Bundle
import android.text.InputType
import android.view.inputmethod.EditorInfo
import android.widget.EditText
import android.widget.SeekBar
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.EditTextPreference
import androidx.preference.PreferenceFragmentCompat
class SettingsActivity2 : AppCompatActivity(), SeekBar.OnSeekBarChangeListener, EditTextPreference.OnBindEditTextListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.settings_activity)
if (savedInstanceState == null) {
supportFragmentManager
.beginTransaction()
.replace(R.id.settings, SettingsFragment())
.commit()
}
supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, rootKey)
}
}
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
println("triggered1")
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
println("triggered2")
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
println("triggered3")
}
override fun onBindEditText(editText: EditText) {
println("triggered4")
}
}
root_preferences.xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory app:title="@string/messages_header">
<EditTextPreference
app:key="signature"
app:title="@string/signature_title"
app:useSimpleSummaryProvider="true" />
<ListPreference
app:defaultValue="reply"
app:entries="@array/reply_entries"
app:entryValues="@array/reply_values"
app:key="reply"
app:title="@string/reply_title"
app:useSimpleSummaryProvider="true" />
<SeekBarPreference
android:key="seekbar_preference"
android:title="Brightness"
android:summary="@string/value_percentage"
android:progress="0"
app:showSeekBarValue="true" />
</PreferenceCategory>
<PreferenceCategory app:title="@string/sync_header">
<SwitchPreferenceCompat
app:key="sync"
app:title="@string/sync_title" />
<SwitchPreferenceCompat
app:dependency="sync"
app:key="attachment"
app:summaryOff="@string/attachment_summary_off"
app:summaryOn="@string/attachment_summary_on"
app:title="@string/attachment_title" />
</PreferenceCategory>
</PreferenceScreen>
【问题讨论】:
-
由于是
SettingsFragment具有Seekbar,SettingsFragment是实现SeekBar.OnSeekBarChangeListener并具有seekbar.setOnSeekBarChangeListener(this)的那个,而不是SettingsActivity2。 -
@Onik 抱歉回复晚了。在
root_preferences中你不能添加id所以我不能使用findViewById来获取seekbar。还有其他方法可以访问首选项中的对象吗?好像我错过了什么 -
尚未使用首选项屏幕布局自定义,但根据How to add a button to PreferenceScreen 似乎是可能的。
标签: android kotlin android-preferences