Android listview和checkedtextview

Android listview和checkedtextview,android,listview,checkedtextview,Android,Listview,Checkedtextview,我有一个带有CheckedTextView的listview。我想在选择项时将其值添加到列表中,在取消选择时从列表中删除该值。我不知道为什么我不能得到准确的值。提前谢谢 这是我的密码 listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(A

我有一个带有CheckedTextView的listview。我想在选择项时将其值添加到列表中,在取消选择时从列表中删除该值。我不知道为什么我不能得到准确的值。提前谢谢

这是我的密码

      listview.setOnItemClickListener(new OnItemClickListener() {

                            @Override
                            public void onItemClick(AdapterView<?> parent,
                                    View view, int position, long id) {



                                CheckedTextView ctv=(CheckedTextView)view.findViewById(R.id.addonsItem);

                            if (ctv.isChecked()) {

                                Temp.addonsIdList.add(addonsiDList.get(position));
                                Temp.addonsNameList.add(addonsList.get(position));
                                Temp.addonsPriceList.add(addonsPriceList.get(position));
                                ctv.setChecked(false);



                            }else{

                                Temp.addonsIdList.remove(addonsiDList.get(position));
                                Temp.addonsNameList.remove(addonsList.get(position));
                                Temp.addonsPriceList.remove(addonsPriceList.get(position));
                                ctv.setChecked(true);



                            } 
试试这个

您需要首先实现else部分,如下所示

ViewHolder holder;

     if (convertView == null) {
    holder = new ViewHolder();
            convertView = LayoutInflater.from(getContext()).inflate(
                    R.layout.addons_text, parent, false);
            holder.checkTV=(CheckedTextView)convertView.findViewById(R.id.addonsItem);


    convertView.setTag(holder);               
        }else{
    holder = (ViewHolder) convertView.getTag();
    }
     holder.checkTV.setText(Temp.addonsName.get(position)); 
然后创建类

class ViewHolder {
            CheckedTextView checkTV;
}
编辑1:

对于滚动问题,您需要遵循以下步骤

步骤1。
在ArrayList中添加选定的行值

步骤2。
在getView中添加一个条件

if(yourArrayList.contains(selected_value)){
holder.checkTV.setChecked(true);
}else{
holder.checkTV.setChecked(false);
}
试试这个

您需要首先实现else部分,如下所示

ViewHolder holder;

     if (convertView == null) {
    holder = new ViewHolder();
            convertView = LayoutInflater.from(getContext()).inflate(
                    R.layout.addons_text, parent, false);
            holder.checkTV=(CheckedTextView)convertView.findViewById(R.id.addonsItem);


    convertView.setTag(holder);               
        }else{
    holder = (ViewHolder) convertView.getTag();
    }
     holder.checkTV.setText(Temp.addonsName.get(position)); 
然后创建类

class ViewHolder {
            CheckedTextView checkTV;
}
编辑1:

对于滚动问题,您需要遵循以下步骤

步骤1。
在ArrayList中添加选定的行值

步骤2。
在getView中添加一个条件

if(yourArrayList.contains(selected_value)){
holder.checkTV.setChecked(true);
}else{
holder.checkTV.setChecked(false);
}


滚动时您的选择是否更改?是。有时应用程序崩溃。适配器getView代码在哪里?@Amsheer我已附加了我的代码。检查我的答案这将解决你的崩溃。滚动时更改你的选择?是。有时应用程序崩溃。适配器getView代码在哪里?@Amsheer我已经附加了我的代码。检查我的答案这将解决你的问题。crashI也尝试过这个。但问题是我选择了一个项目,但显示了另一个项目。我知道。所以,只需在你的问题中添加评论。你有任何ID字段吗?我不想混淆。告诉我addonsIdList是整数ArrayList吗?不是,是字符串ArrayList最后我解决了它,真冷!!我只是注释掉CheckTextView.setChecked(true)。现在我想要的效果很好。我也试过这个。但问题是我选择了一个项目,但显示了另一个项目。我知道。所以,只需在你的问题中添加评论。你有任何ID字段吗?我不想混淆。告诉我addonsIdList是整数ArrayList吗?不是,是字符串ArrayList最后我解决了它,真冷!!我只是注释掉CheckTextView.setChecked(true)。现在我想要的工作很好。