AndroidX MultiSelectListPreference 设置占位符
AndroidX MultiSelectListPreference set placeholder
我有一个使用 AndroidX 首选项的首选项屏幕 API,我正在使用一个 MultiSelectListPreference,它会动态填充其条目。
因此,条目数组可以为空,在这种情况下我想显示像 "No items found" 这样的文本。目前我尝试将占位符文本设置为一个条目,虽然这在技术上可行,但它允许用户 select 这个条目(复选框仍然出现)。
关于如何显示占位符文本,但要确保复选框不出现的任何想法?
谢谢
您最初可以在首选项 XML 文件中将 MultiSelectListPreference
设置为禁用,然后在设置值后使用 Preference#setEnabled
以编程方式启用它。
示例如下:
pref_todo.xml
:
<androidx.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- ... -->
<MultiSelectListPreference
app:enabled="false"
app:title="@string/pref_weekly_summary_title"
app:summary="@string/pref_weekly_summary_summary"
app:key="pref_weekly_summary" />
<!-- ... -->
</androidx.preference.PreferenceScreen>
您偏好的片段代码(Java):
import androidx.preference.PreferenceFragment;
import androidx.preference.MultiSelectListPreference;
// ...
public class TodoPreferenceFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootkey) {
setPreferencesFromResource(R.xml.pref_todo, rootKey);
// Cast from a Preference to a MultiSelectListPreference
MultiSelectListPreference weeklySummaryListPref = (MultiSelectListPreference) findPreference("pref_weekly_summary");
// Set the entries
weeklySummaryListPref.setEntries(new CharSequence[]{"Todos progress", "Todos completed"});
weeklySummaryListPref.setEntryValues(new CharSequence[]{"todos_progress", "todos_completed"});
// Lastly, reenable the preference
weeklySummaryListPref.setEnabled(true);
}
}
您偏好的片段代码(Kotlin w/ Preference KTX):
import androidx.preference.PreferenceFragment
import androidx.preference.MultiSelectListPreference
// ...
class TodoPreferenceFragment: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.pref_todo, rootKey)
// Cast from a Preference to a MultiSelectListPreference
// Note: This syntax is only supported on AndroidX Preference versions 1.1.0-alpha02 and up
val weeklySummaryListPref = findPreference<MultiSelectListPreference>("pref_weekly_summary")
// Set the entries
weeklySummaryListPref.entries = arrayOf("Todos progress", "Todos completed")
weeklySummaryListPref.entryValues = arrayOf("todos_progress", "todos_completed")
// Lastly, reenable the preference
weeklySummaryListPref.enabled = true
}
}
我有一个使用 AndroidX 首选项的首选项屏幕 API,我正在使用一个 MultiSelectListPreference,它会动态填充其条目。
因此,条目数组可以为空,在这种情况下我想显示像 "No items found" 这样的文本。目前我尝试将占位符文本设置为一个条目,虽然这在技术上可行,但它允许用户 select 这个条目(复选框仍然出现)。
关于如何显示占位符文本,但要确保复选框不出现的任何想法?
谢谢
您最初可以在首选项 XML 文件中将 MultiSelectListPreference
设置为禁用,然后在设置值后使用 Preference#setEnabled
以编程方式启用它。
示例如下:
pref_todo.xml
:
<androidx.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- ... -->
<MultiSelectListPreference
app:enabled="false"
app:title="@string/pref_weekly_summary_title"
app:summary="@string/pref_weekly_summary_summary"
app:key="pref_weekly_summary" />
<!-- ... -->
</androidx.preference.PreferenceScreen>
您偏好的片段代码(Java):
import androidx.preference.PreferenceFragment;
import androidx.preference.MultiSelectListPreference;
// ...
public class TodoPreferenceFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootkey) {
setPreferencesFromResource(R.xml.pref_todo, rootKey);
// Cast from a Preference to a MultiSelectListPreference
MultiSelectListPreference weeklySummaryListPref = (MultiSelectListPreference) findPreference("pref_weekly_summary");
// Set the entries
weeklySummaryListPref.setEntries(new CharSequence[]{"Todos progress", "Todos completed"});
weeklySummaryListPref.setEntryValues(new CharSequence[]{"todos_progress", "todos_completed"});
// Lastly, reenable the preference
weeklySummaryListPref.setEnabled(true);
}
}
您偏好的片段代码(Kotlin w/ Preference KTX):
import androidx.preference.PreferenceFragment
import androidx.preference.MultiSelectListPreference
// ...
class TodoPreferenceFragment: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.pref_todo, rootKey)
// Cast from a Preference to a MultiSelectListPreference
// Note: This syntax is only supported on AndroidX Preference versions 1.1.0-alpha02 and up
val weeklySummaryListPref = findPreference<MultiSelectListPreference>("pref_weekly_summary")
// Set the entries
weeklySummaryListPref.entries = arrayOf("Todos progress", "Todos completed")
weeklySummaryListPref.entryValues = arrayOf("todos_progress", "todos_completed")
// Lastly, reenable the preference
weeklySummaryListPref.enabled = true
}
}