You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:49:50