Android Shared Prefs将键值映射到ArrayList到ListView行 - UPDATED

时间:2011-11-15 20:32:01

标签: java android arraylist simpleadapter

这是我正在尝试做的事情: - 从SharedPreferences对象(用户#,名称)中检索键值对的映射 - 将这些键值对写入ArrayList,以便我可以 - 使用它们填充ListView,每行包含键和值,如下所示:

  1. 用户1 - Joe R。

  2. 用户2 - Frank B.


  3. 更新: 所以在深入了解SimpleAdapter课程,并与一些更聪明的知识人士交谈之后 - 我比我更接近......但仍然不是一直都在那里。

    这就是我现在所拥有的:

    public class LogHistory extends ListActivity {
    
    static final ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
    private static final String KEY = null;
    private static final String VALUE = null;
    
    public void onCreate(Bundle b) {
        super.onCreate(b);
        setContentView(R.layout.log_history);
    
        SharedPreferences logPrefs = getSharedPreferences(LoginField.PREFSNAME, 0);
        Map<String, ?> logMap = logPrefs.getAll();
    
        for (Map.Entry<String, ?> e : logMap.entrySet()) {
            HashMap<String, String> row = new HashMap<String, String>();
            String mKey = e.getKey();
            String mValue = (String) e.getValue();
            row.put(KEY, mKey);
            row.put(VALUE, mValue);
            list.add(row);
    
            // FOR DEBUGGING PURPOSES
            makeToast(mKey);
            makeToast(mValue);
        }
    
        SimpleAdapter adapter = new SimpleAdapter(
            this,
                list,
                R.layout.list_item,
                new String[] { KEY, VALUE },
                new int[] {R.id.item1, R.id.item2}
        );
    
        setListAdapter(adapter); 
    

    这种作品 - 但只有一半...我得到的结果是两个列中的VALUES列表......

    然而,makeToast函数返回KEY和VALUE的正确值 - 所以问题必须在SimpleAdapter方法中是吗??

    援助会很棒 - 家庭作业将在今晚到期! :-0

1 个答案:

答案 0 :(得分:1)

您需要搜索“自定义列表视图”,“listview自定义适配器”以及这些内容。 “两行列表视图项目布局”......

this example。谷歌还有其他人。

基本上,您可以创建一个ArrayList<Hashmap<String,String>>,这是您的数据容器。您可以根据需要为HashMap<String, String>创建尽可能多的list.add(yourHashMap)个对象,并使用SimpleAdapter,其中list是ArrayList。

最后你将它提供给row.put(KEY, mKey); row.put(VALUE, mValue); (还有其他方法,但这没有太大麻烦)。

检查文档以了解每件事情的确切运作方式。


您正在归零索引键。在最终的字符串中添加一个名称。

  

这种作品 - 但只有一半...我得到的结果是两列中的VALUES列表......   然而,makeToast函数返回KEY和VALUE的正确值 - 所以问题必须在SimpleAdapter方法中是吗??

正如我所说,不。当你这样做时:

KEY

您没有在VALUEmakeToast(mKey); makeToast(mValue); 之间提供有意义的差异,因为两者都是空的。这就像将所有内容放入相同的列中一样。

您的推理错误是因为您自己创建的Toast测试只测试了值的正确性,而不是列:

{{1}}

因为你只测试值。 ;)你 假设 列是正确的,并且错误只能在值中,这恰恰相反。

处理计算机的第一条规则:计算机永远不会假设LOL。 ; - )