public View getView(int position, View convertView, ViewGroup parent) {
Drawing drawing = (Drawing) this.getItem(position);
ViewHolder viewHolder;
if(convertView == null){
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_item, null);
viewHolder.tv1 = (TextView) convertView.findViewById(R.id.tv1);
viewHolder.tv2 = (EditText) convertView.findViewById(R.id.tv2);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
for (Map.Entry<String,Object> entry:map.entrySet()){
String key=entry.getKey();
String value=String.valueOf(entry.getValue());
Log.d(TAG, "getView: "+key+"==="+value);
viewHolder.tv1.setText(key);
viewHolder.tv2.setText(value);
}
return convertView;
}
想要的是将map中所有的key-value显示在listview中,但是最后全被map中的最后一行数据给覆盖了,如何才能显示出map中的每一对数据在listview中
因为你这循环完就是最后一条数据覆盖到了 应该用list来进行操作的,你最后那个循环写的没有意义,
https://www.cnblogs.com/r-decade/p/5827841.html
看下这个补补基础吧
getView()方法是多次调用的(每次i填充item都会调用),你在这个方法里做循环赋值话,肯定每次都是map里最后一个位置上的数据被显示到item上的。
用list的下标来进行显示
BaseAdapter中的数据建议还是使用List的数据结构更好,Map的话需要将position作为key去取item,不好用。你这里的问题也是在于你的map没有和任何position相对应,渲染时每一次调用getView(),都是走完了遍历流程到Map的最后一个,也就不会有变化。
getView中还去循环数据?
for (Map.Entry entry:map.entrySet()){
String key=entry.getKey();
String value=String.valueOf(entry.getValue());
Log.d(TAG, "getView: "+key+"==="+value);
viewHolder.tv1.setText(key);
viewHolder.tv2.setText(value);
}
这段代码不是这么写的,你只需要取出对应的possition的值显示到控件上就好了
getView这个方法里等于是把数据集合在循环了,每次走getVew等于就在取集合数据中的一条数据