Android 为什么这个带有复选框的ListView自定义适配器的行为很奇怪?

Android 为什么这个带有复选框的ListView自定义适配器的行为很奇怪?,android,Android,我的ListView自定义适配器的复选框的行为很奇怪。当我选中任何复选框并上下滚动时,我的应用程序会随机选中复选框。我很困惑 下面是getView函数 @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub LayoutInflater inflater=(LayoutInflater) context.get

我的ListView自定义适配器的复选框的行为很奇怪。当我选中任何复选框并上下滚动时,我的应用程序会随机选中复选框。我很困惑

下面是getView函数

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  // TODO Auto-generated method stub

  LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

 final ViewHolder holder;
  if (convertView == null) {
        convertView =inflater.inflate(R.layout.activity_main, parent,
                false);
        holder = new ViewHolder();

        holder.checkBox = (CheckBox) convertView.findViewById(R.id.chkbox);
        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();


    }
  holder.checkBox.setText(Name[position]);
    return convertView;
}
java类

 public class ViewHolder {
 CheckBox checkBox;
 }
 String[] names=new String[]{
            "Name1" , "Name2" , "Name3" ,"Name4" , "Name5" , "Name6","Name7"         , "Name8" , "Name9","Name10" , "Name11" , "Name12"};
MainActivity.java类中的字符串

 public class ViewHolder {
 CheckBox checkBox;
 }
 String[] names=new String[]{
            "Name1" , "Name2" , "Name3" ,"Name4" , "Name5" , "Name6","Name7"         , "Name8" , "Name9","Name10" , "Name11" , "Name12"};

我确信这是原因,但可能是以下原因之一:

  • 将视图持有者类设为静态,以便只有一个实例
  • 为什么每次调用getView时都会膨胀布局(调用次数很多);在构造函数中执行此操作,并为以后的访问分配一个成员变量
  • 我认为这不是必需的,但请确保将复选框初始化为checked=false

否则,您的代码在我看来很好,我不在我的开发机器上,因此无法测试我的建议。希望有帮助。

您需要在getView中设置复选框的“选中”状态(例如,在调用setText之后)

现在,当您单击其中一个视图时,它的复选框被选中,然后该视图将在其他位置重复使用,但仍保持选中状态