这是我正在尝试做的事情: - 从SharedPreferences对象(用户#,名称)中检索键值对的映射 - 将这些键值对写入ArrayList,以便我可以 - 使用它们填充ListView,每行包含键和值,如下所示:
用户1 - Joe R。
用户2 - Frank B.
等
更新: 所以在深入了解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答案 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
您没有在VALUE
和makeToast(mKey);
makeToast(mValue);
之间提供有意义的差异,因为两者都是空的。这就像将所有内容放入相同的列中一样。
您的推理错误是因为您自己创建的Toast测试只测试了值的正确性,而不是列:
{{1}}
因为你只测试值。 ;)你 假设 列是正确的,并且错误只能在值中,这恰恰相反。
处理计算机的第一条规则:计算机永远不会假设LOL。 ; - )