Android中ListView复用导致布局错乱的解决方案

本文探讨了在Android中使用ListView时遇到的布局错乱问题,原因是布局复用机制。解决方案是将选中状态与每个条目关联,通过在Model中添加一个表示选择状态的字段,并在getView()中根据此字段设置正确或错误的图片。当用户点击选项时,及时更新该字段值,从而避免未选择的条目显示错误状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先来说一下具体的需求是什么样的:


需求如图所示,这里面有ABCD四个选项的题目,当点击A选项,如果A是正确的答案,则变成对勾的图案,如果是错误答案,则变成错误的图案,

这里当时在写的时候觉得很简单,只要是在点击的时候判断我点击的选项与正确答案是否一样,是一样就将图片换成正确的样式,如果不一样就换成错误的样式,于是我便写了下面的代码(只贴出了核心Adapter中的代码)

package com.fizzer.anbangproject_dahuo_test.Adapter;

import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.fizzer.anbangproject_dahuo_test.Model.ConvertModel;
import com.fizzer.anbangproject_dahuo_test.R;

import java.util.List;

/**
 * Created by Fizzer on 2016/10/8.
 * Email: doraemonmqq@sina.com
 */
public class ConvertViewAdapter extends BaseAdapter {

    private List<ConvertModel> list;
    private Context mContext;

    public ConvertViewAdapter(Context context, List<ConvertModel> list) {
        mContext = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        if (list == null) {
            return 0;
        } else {
            return list.size();
        }
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder mViewHolder;
        if (convertView == null) {
            convertView = View.inflate(mContext, R.layout.view_upgradepartnet_topic_layout, null);
            mViewHolder = new ViewHolder();
            mViewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
            mViewHolder.tvSelectA = (TextView) convertView.findViewById(R.id.tvSelectA);
            mViewHolder.tvSelectB = (TextView) convertView.findViewById(R.id.tvSelectB);
            mViewHolder.tvSelectC = (TextView) convertView.findViewById(R.id.tvSelectC);
            mViewHolder.tvSelectD = (TextView) convertView.findViewById(R.id.tvSelectD);
            convertView.setTag(mViewHolder);
        } else {
            mViewHolder = (ViewHolder) convertView.getTag();
        }

        ConvertModel module = list.get(position);
        mViewHolder.tvTitle.setText("Q" + (position + 1) + ":" + module.title);

        mViewHolder.tvSelectA.setText(module.optionA);
        mViewHolder.tvSelectB.setText(module.optionB);
        mViewHolder.tvSelectC.setText
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值