ListView添加条目异常:仅显示最后一项的问题求助
解决ListView添加条目仅显示最后一项的问题
嘿,我一眼就发现你代码里的问题啦!你每次点击按钮的时候,都重新创建了一个新的ArrayList和ArrayAdapter——这就意味着你之前输入的内容都存在旧的集合里,每次点击都会把旧的集合和适配器丢掉,只保留当前输入的那一项,自然就只能看到最后输入的内容咯。
问题代码的核心问题点:
在按钮的点击事件里,你每次都执行:
ArrayList<String> arrayList= new ArrayList<String>(); final ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, arrayList);
这会导致每次点击都生成全新的集合和适配器,之前添加的元素根本没法被保留下来。
修复方案:
把ArrayList和ArrayAdapter移到点击事件外面,作为类的成员变量或者ViewHolder的成员变量,只初始化一次。每次点击按钮时,只往已有的集合里添加新数据,然后通知适配器更新即可。
修改后的代码示例:
首先,在你的Adapter类里(或者ViewHolder中)定义成员变量:
// 把集合和适配器定义为成员变量,只初始化一次 private ArrayList<String> arrayList = new ArrayList<>(); private ArrayAdapter<String> adapter;
然后在ViewHolder的初始化或者Adapter的构造方法里初始化适配器:
// 比如在ViewHolder的构造方法或者Adapter的onCreateViewHolder里初始化适配器 adapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, arrayList); holder.lw.setAdapter(adapter); // 只设置一次适配器
最后修改按钮的点击事件:
holder.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("IDDD:"+iddd); System.out.println("IDDD:"+video2.getPic()); String commento = holder.tw.getText().toString(); // 直接往已有的集合里添加数据 arrayList.add(commento); // 通知适配器数据已改变,更新UI adapter.notifyDataSetChanged(); System.out.println("LISTVIEW:"+arrayList); } });
这样修改后,每次点击按钮都会把新的内容添加到同一个集合里,适配器也会正确地把所有条目都显示出来啦!
内容的提问来源于stack exchange,提问作者oliver
相关产品推荐
相关产品推荐

