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

如何为ListView中的TextView添加点击显示的对勾图片并实现提交跳转

实现步骤

1. 定义数据实体类

用来存储每个列表项的文本和选中状态,示例代码:

public class OptionItem {
    private String content;
    private boolean isSelected;

    // 构造方法、getter、setter自行补充
}

2. 实现ListView适配器

在getView方法中根据选中状态动态控制TextView的对勾显示,同时处理点击事件实现单选逻辑:

  • 每次点击某个项时,将所有项的选中状态重置为false,再把当前点击项设为true
  • 调用notifyDataSetChanged()刷新列表
  • 对勾可以直接通过TextView的内置复合Drawable实现,不需要额外添加ImageView控件,示例核心代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // 复用convertView逻辑自行实现
    TextView contentTv = convertView.findViewById(R.id.tv_content);
    OptionItem item = dataList.get(position);
    
    contentTv.setText(item.getContent());
    if (item.isSelected()) {
        // 左侧显示对勾,参数顺序为左、上、右、下的drawable,不需要的传0即可
        contentTv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_check, 0, 0, 0);
        // 要调整图标和文字的间距可以加下面这句,单位为px
        contentTv.setCompoundDrawablePadding(8);
    } else {
        // 未选中时清除所有复合drawable
        contentTv.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
    }

    // 点击事件,如需仅点击文本响应则把事件设置到contentTv上
    convertView.setOnClickListener(v -> {
        // 单选逻辑:重置所有选中状态
        for (OptionItem option : dataList) {
            option.setSelected(false);
        }
        // 设置当前项为选中
        item.setSelected(true);
        notifyDataSetChanged();
    });
    return convertView;
}

3. 实现提交跳转逻辑

给提交按钮设置点击事件,点击时先获取当前选中的项的文本,再携带参数跳转到目标页面:

submitBtn.setOnClickListener(v -> {
    String selectedContent = "";
    for (OptionItem item : dataList) {
        if (item.isSelected()) {
            selectedContent = item.getContent();
            break;
        }
    }
    // 跳转逻辑
    Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
    intent.putExtra("SELECTED_CONTENT", selectedContent);
    startActivity(intent);
});

目标页面接收参数后展示即可:

// TargetActivity的onCreate中
String content = getIntent().getStringExtra("SELECTED_CONTENT");
// 赋值给对应TextView展示
TextView showTv = findViewById(R.id.tv_show);
showTv.setText(content);
可选调整项
  • 如果使用Kotlin开发,核心逻辑一致,仅语法存在差异
  • 如果需要实现多选效果,不需要重置所有项的选中状态,直接切换当前点击项的状态即可,提交时收集所有选中的内容传参
  • 对勾如果要显示在TextView右侧,只需要把setCompoundDrawablesWithIntrinsicBounds的第三个参数改成对勾资源,其他位置传0即可
  • 图标大小如果不符合预期,可以先对drawable进行resize再调用setCompoundDrawables方法设置

内容的提问来源于stack exchange,提问作者JackCohen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:15:08