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

Android实现打开其他Activity后在ListView对应项显示勾选图标

Android实现子页面返回后ListView对应项显示勾选标记方案

实现逻辑分4步走,原生API即可完成,无需额外依赖:

  • 第一步:改造列表数据模型
    给每个列表对应的数据项新增布尔类型的状态标记字段isVisited,默认值为false,用来记录对应页面是否已经完成访问,示例实体类结构:
public class PageEntry {
    // 列表显示的页面名称
    public String pageName;
    // 点击后跳转的目标Activity
    public Class<?> targetClz;
    // 访问状态标记:true=已完成访问显示勾选,false=未访问隐藏勾选
    public boolean isVisited;
}
  • 第二步:调整列表适配器逻辑
    自定义继承自BaseAdapter的列表适配器,在getView方法中根据当前项的isVisited字段值,控制勾选图标的显示/隐藏,注意做好ViewHolder复用避免列表滚动时状态错乱,核心逻辑参考:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ItemHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_page_entry, parent, false);
        holder = new ItemHolder();
        holder.nameTv = convertView.findViewById(R.id.tv_page_name);
        holder.tickIv = convertView.findViewById(R.id.iv_tick);
        convertView.setTag(holder);
    } else {
        holder = (ItemHolder) convertView.getTag();
    }
    PageEntry currentItem = getItem(position);
    holder.nameTv.setText(currentItem.pageName);
    // 核心状态控制逻辑
    holder.tickIv.setVisibility(currentItem.isVisited ? View.VISIBLE : View.GONE);
    return convertView;
}
  • 第三步:带参数启动子页面
    在Activity A的列表项点击事件中,不要直接用普通跳转方式,选择带结果回调的启动方式,同时把当前点击的列表项位置通过Intent传给目标页面:
// 列表点击事件
listView.setOnItemClickListener((parent, view, position, id) -> {
    PageEntry entry = dataList.get(position);
    Intent jumpIntent = new Intent(ActivityA.this, entry.targetClz);
    // 传入点击的列表位置,返回时用于定位要更新的项
    jumpIntent.putExtra("item_position", position);
    pageJumpLauncher.launch(jumpIntent);
});
  • 第四步:处理子页面返回回调
    首先在Activity B、C中,当用户完成访问操作准备返回A时,先设置成功结果码再关闭页面:
// Activity B/C中用户完成操作的触发逻辑(比如表单提交、确认按钮点击事件)
setResult(RESULT_OK);
finish();

然后在Activity A中注册页面返回回调,拿到返回结果后更新对应位置列表项的访问状态,刷新适配器即可:

// 注册Activity结果回调
ActivityResultLauncher<Intent> pageJumpLauncher = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == RESULT_OK && result.getData() != null) {
                int updatePos = result.getData().getIntExtra("item_position", -1);
                if (updatePos >= 0) {
                    // 更新对应项的访问状态
                    dataList.get(updatePos).isVisited = true;
                    // 通知列表刷新
                    adapter.notifyDataSetChanged();
                }
            }
        }
);

补充说明:如果需要APP重启后依然保留勾选状态,只需要在更新isVisited字段时,把状态同步存入SharedPreferences或本地数据库,每次进入Activity A加载列表数据时,优先读取本地存储的状态给字段赋值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:21:24