当前位置: 首页 > 知识库问答 >
问题:

复选框在列表视图Android中被取消选中?

干弘深
2023-03-14

我知道有许多解决方案可以解决这个问题,但我并不是解决这个问题的正确方法,当一个复选框被选中时,我会为它分配一个ID,并将其添加到一个数组中,但当向下滚动时,该复选框被取消选中,但ID存储在数组中,如果它被选中,我希望它保持选中状态。

我的适配器类是。

public class sendivitesadapter extends ArrayAdapter<Item> implements Filterable,SectionIndexer{
    private Context context;
    private ArrayList<Item> items;
    private qrusers qrusers;
    private LayoutInflater vi;
    private String[] udis;
    private final boolean[] mCheckedState;
    qrusers qrus;

    private ItemsFilter mFilter;

    public sendivitesadapter(Context context,ArrayList<Item> items,String[]udis) {
        super(context, 0,items);

        this.context = context;
        mCheckedState = new boolean[items.size()];
        this.qrusers =(qrusers) context;
        this.items = items;
        this.udis=uid;
        vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Item getItem(int position) {
        return super.getItem(position);
    }

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

        View v = convertView;

        final Item i = items.get(position);

        if (i != null) {
            if(i.isSection()){
                SectionItem si = (SectionItem)i;
                v = vi.inflate(R.layout.checkboxlist, null);

                v.setOnClickListener(null);
                v.setOnLongClickListener(null);
                v.setLongClickable(false);

                final TextView sectionView = (TextView) v.findViewById(R.id.list_item_section_text);
                sectionView.setText(si.getTitle());

            }else{
                sendItem ei = (sendItem)i;
                v = vi.inflate(R.layout.checkboxlist, null);
                final TextView title = (TextView)v.findViewById(R.id.contactname);
                final TextView subtitle = (TextView)v.findViewById(R.id.companyname);
                 checkBox=(CheckBox)v.findViewById(R.id.checboxlist);
                //checkBox.setTag(position);
                //items.addAll(uid);

               checkBox.setTag(udis[position]);

               checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(isChecked){
                        s = (String)buttonView.getTag();
                        Log.e("IDDDDDDDD", s);

                        userid.add(s);
                        Log.e("Array", userid.toString());
                    } else {
                        s = (String)buttonView.getTag();
                        userid.remove(s);

                    }
                    SharedPreferences app_preferences = PreferenceManager
                            .getDefaultSharedPreferences(qrusers.this);
                    SharedPreferences.Editor editor = app_preferences.edit();

                    editor.putString("userid", TextUtils.join(",", userid));
                    editor.commit();
                }
            });


                //    Log.e("IDDDDDDD", text);
                    //checkBox.setTag("12");
                /*  checkBox.setOnClickListener(new OnClickListener() {


                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub

                        if(checkBox.isChecked()){
                             s= (String)v.getTag();
                            Log.e("IDDDDDDDDDDDDDDDDDDDDDD", s);
                        userid.add(s);

                        Log.e("Array", userid.toString());

                        }
                        else{
                        s=(String)v.getTag();
                        userid.remove(s);
                        }

                        }
                    });*/
                    if (title != null) 
                        title.setText(ei.contactname);
                    if(subtitle != null)
                        subtitle.setText(ei.companyname);

                }
            }
            return v;
        }

共有2个答案

丁学
2023-03-14

这个问题有你的答案。您必须维护一个单独的结构来选中/取消选中复选框。

列表视图视图复选框状态

暨弘懿
2023-03-14

如果要存储复选框的状态,则必须在内部 ListView 或您正在使用的任何结构以及扩展适配器中似乎称为的内容中更新它,并且不要忘记在之后调用 notifyDataSetChanged()

 类似资料:
  • 我的ListView自定义适配器(及其新实现的viewHolder)有一些问题。我有一个列表视图,每个项目都有一个复选框(这里没有新内容)。问题是,如果我的列表中有超过9个项目,当我选中第一个复选框时,第十个将自动选中(第二个与第十一个相同),就像两个项目都有一个监听器一样(我认为在某种程度上是这样)。 我在这里读到了listView、视图回收和ViewHolder解决它的方法的位置问题:如何使我

  • 我正在编写一个android应用程序,我有麻烦得到行的位置在与。 我已经用复选框创建了。但我不知道如何为每个选中的条目找到行的位置。一旦我得到了选中的位置,我想执行一个删除选中的操作。 请帮帮忙! 这是我的代码:

  • 下载整个项目。zip在这里 此问题的代码在Views文件夹中的CreateSchedule.aspx文件中。 以下是GridView的ASP.NET: 在取消选中某个框后调试事件时,网页上的复选框显示为未选中,但的值为true,即使该复选框在网页上显示为未选中。(chkRow是未选中的复选框) 更新3 我取得了一些突破。我发现复选框的问题在于嵌套的gridview位于使用JavaScript折叠和

  • 我创建了一个windows窗体(到目前为止)只包含复选框。构造函数接受一个参数:。对于这个数组中的每个字符串,我都会创建一个复选框。 例如: null 那么,当另一个复选框调用uncheck时,是否有一种方法可以告诉我的复选框不要运行? 下面是我的代码(它都是手工编写的,所以没有使用visual studio设计器):

  • 公共视图getView(最终int位置,视图转换视图,ViewGroup父){ 这是我的XML文件代码, 我无法取消选中这个单选按钮。我已经发布了我的Java代码和xml代码。感谢提前帮助。

  • 我正在尝试一个Woocommerce票证插件。默认情况下,该插件会显示一个表,其中包含多个票证变体作为产品,并在下面显示一个文本字段作为其数量和一个提交按钮,以将产品添加到购物车中。 我想用单选按钮或复选框替换这个文本字段,这样用户就可以选择一种类型的票证,然后点击提交按钮将其中的一部分添加到购物车中。 我的想法是在foreach循环中创建一个复选框或单选按钮,该复选框或单选按钮的值为quanti