Android MultiSelectListPreference的优先顺序

越石

我是Android的新手。我想在我的情况下使用MultiSelectListPreference。

但是我遇到一个问题:我的列表需要保持元素的顺序。假设有5个元素:

0 - Tom
1 - David
2 - Bob
3 - Mary
4 - Chris

并且用户选择0、2、3。然后列表的顺序必须如下:

汤姆,鲍勃,玛丽

但是MultiSelectListPreferenceSet<String>不会将设置存储在中ArrayList<String>因此由于不确定该顺序Set

如何确定此订单?谢谢你。

锂3ro

camdaochemgio,即使在您进行编辑之前,我也了解您的问题。

由于我们正在谈论的是一个Set(存储唯一值),因此此getValues()函数需要输入到您自己的revertValues函数中,该函数根据您的数据预置将值转换为索引。我要求提供您的代码,以便可以通过使用自己的样式/术语编写解决方案来表达自己。

解决方案:

我在MultiSelectListPreference文档中注意到以下方法:

int findIndexOfValue(String value)

但是您不存储对对象的此类引用,因此我创建了此类以扩展MultiSelectListPreference(在新文件中!):

public class DataHolder extends MultiSelectListPreference {

    // note: AttributeSet  is needed in super class
    public DataHolder(Context context,AttributeSet attrs) {   
        super(context, attrs);

        List<CharSequence> entries = new ArrayList<CharSequence>();
        List<CharSequence> entriesValues = new ArrayList<CharSequence>();

        /** We could use the String Array like you did in your Q, 
         * But I preffer this way of populating data - 
         * It keeps things open and unlimitted.
         * If you really want the data picked up from the xml , just use : 
         * context.getResources().getStringArray(R.array.entries)  and
         * context.getResources().getStringArray(R.array.entryValues) 
         * */

        entries.add("0");
        entries.add("1");
        entries.add("2");
        entries.add("3");
        entries.add("4");
        entriesValues.add("Tom");
        entriesValues.add("David");
        entriesValues.add("Bob");
        entriesValues.add("Mary");
        entriesValues.add("Chris");

        setEntries(entries.toArray(new CharSequence[5]));
        setEntryValues(entriesValues.toArray(new CharSequence[5]));
    }
}

现在我们需要将其插入您的监听器中。在您的SettingsFragment类中,只需添加一个新字段:

private DataHolder dh = null;

并更改构造函数以接受并初始化它:

public SettingsFragment(Context c) {
    dh = new DataHolder(c,null);
}

下一步:从xml中删除对数据的引用。现在看起来应该像这样:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <com.example.multiselectpref.DataHolder
        android:key="pref_key_name_choice"
        android:title="@string/name_choice"
    />
</PreferenceScreen>

返回监听器,在onSharedPreferenceChanged方法中,您可以将Toast更改为:

toast_message += (dh.findIndexOfValue(name) + ": "+name+"    , ");

为我工作..(提交到fork @ https://github.com/li3ro/MultiSelectPref的代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

CSS的优先顺序是什么?

来自分类Dev

两准则优先顺序queue列

来自分类Dev

Android MultiSelectListPreference,java.lang.String无法强制转换为java.util.Set

来自分类Dev

优先方法调用顺序

来自分类Dev

ThreadPoolExecutor和Android的线程优先级

来自分类Dev

C ++宏:优先顺序不同?

来自分类Dev

C中函数执行的优先顺序

来自分类Dev

创建低优先级的Android服务

来自分类Dev

Android runOnUiThread执行顺序

来自分类Dev

CSS优先顺序

来自分类Dev

SFINAE模板的优先顺序?

来自分类Dev

Android版式优先?

来自分类Dev

野牛规格和优先顺序

来自分类Dev

Android L通知优先级

来自分类Dev

Android版式设计:平板电脑优先或手机优先

来自分类Dev

如何设置Android服务的优先级?

来自分类Dev

多表更新中UPDATE的优先顺序

来自分类Dev

Sling运行模式的优先顺序

来自分类Dev

Java优先顺序

来自分类Dev

CSS规则的优先顺序

来自分类Dev

ThreadPoolExecutor和Android的线程优先级

来自分类Dev

Android:定位优先

来自分类Dev

if语句C ++中的优先顺序

来自分类Dev

SFINAE模板的优先顺序?

来自分类Dev

C / C ++中的优先顺序

来自分类Dev

Android布局设计:平板电脑优先或移动设备优先

来自分类Dev

语法:替代语法的优先顺序

来自分类Dev

||之间的优先顺序 和&&-Java

来自分类Dev

在Intellij IDEA(Android studio)中按字母顺序和优先级对代码进行重新排列