gpt4 book ai didi

android - 复选框的问题

转载 作者:行者123 更新时间:2023-11-29 18:18:29 24 4
gpt4 key购买 nike

我的复选框有一个奇怪的问题。在我的适配器中,我有一个 TextView、一个 ImageView 和一个 CheckBox。我已经实现了一个用于全选/取消全选的按钮,一切正常。问题是,当我选择一个复选框时,如果我滚动列表,就会有其他复选框被选中(它们之间的距离是 10),我不明白为什么。谁能帮帮我?

这是我的适配器:

public class LazyAdapter extends BaseAdapter {

private Activity activity;
private String[] data;
private String[] nume;
private LayoutInflater inflater = null;
public ImageLoader imageLoader;

public LazyAdapter(Activity a, String[] d, String[] f) {
activity = a;
data = d;
nume = f;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = new ImageLoader(activity.getApplicationContext(),"Folder2");
}

public int getCount() {
return data.length;
}

public Object getItem(int position) {
return position;
}

public long getItemId(int position) {
return position;
}

public class ViewHolder {
public TextView text;
public ImageView image;
public CheckBox ck;
}

public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
ViewHolder holder;
if (convertView == null) {
vi = inflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.text = (TextView) vi.findViewById(R.id.text);
holder.image = (ImageView) vi.findViewById(R.id.image);
holder.ck = (CheckBox) vi.findViewById(R.id.chkbox);
if (flag)
holder.ck.setChecked(true);
else
holder.ck.setChecked(false);

vi.setTag(holder);
} else
holder = (ViewHolder) vi.getTag();

holder.text.setText(nume[position]);
holder.image.setTag(data[position]);
imageLoader.DisplayImage(data[position], activity, holder.image);
return vi;
}

}

最佳答案

列表中的 View 被回收。您的数据列表可能有 100 行,但 ListView 只有 10(这些可见的)行。当您滚动时,行将被回收。 ListView 中的最后一行转到第一个位置或以其他方式。您必须更改这些行的状态。您需要将复选框状态保存在数组中,而不是 View 中。

添加

        final List<Boolean> isCheckedList;

在构造函数中初始化它:

        isCheckedList = new ArrayList<Boolean>();
for(int i=0;i<myDataLength;i++){
isCheckedList.add(Boolean.FALSE);
}

并修改getView:

        holder.ck.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
isCheckedList.set(position, holder.ck.isChecked());
}
});

在填充行的地方:

        holder.ck.setChecked(isCheckedList.get(position));

要更改所有复选框的状态,请使用:

        Collections.fill(isCheckedList, Boolean.FALSE);
notifyDataSetChanged();

关于android - 复选框的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6846151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com