简体   繁体   English

如何检查复选框是否预先选中

[英]How to check a checkbox if it is checked prevoiusly

I have implemented check box in a list, there is a names with check box. 我已经实现了列表中的复选框,有一个带有复选框的名称。 My problem is, I will select five names and I will display those names, after that if I come back to list, again those five names should be checked because I have already selected those names. 我的问题是,我将选择五个名称并显示这些名称,此后,如果我返回列表,则应再次检查这五个名称,因为我已经选择了这些名称。

But now those are unchecked when I have revisited. 但是现在,当我重新访问时,这些都没有选中 How to achieve this. 如何实现这一目标。

My adapter code. 我的适配器代码。

     holder.UserId_Fk.setText(tempValues.getUserId_Fk().toString());
            holder.chkbox.setOnCheckedChangeListener(null);

            holder.chkbox.setChecked(checkedHolder[position]);
            Log.i(TAG, "Position " + checkedHolder[position]);

            if (checkedHolder[position])
                holder.chkbox.setChecked(true);
            else
                holder.chkbox.setChecked(false);

            holder.chkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {

                            checkedHolder[position] = isChecked;
                            Log.i(TAG, "Position " + checkedHolder[position]);
                        }
                    });

My activity code.. 我的活动代码..

list.setOnItemClickListener(new OnItemClickListener() {

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

                CheckBox cb = (CheckBox) view.findViewById(R.id.chkbox);

                cb.performClick();

                if (cb.isChecked()) {

                    for (int i = 0; i < adapter.getCount(); i++) {
                        if (adapter.checkedHolder[i]) {
                            // get all name values that checked by user
                            MemberName.clear();
                            MemberName.add(ItemsArr.get(i).getItemName().toString());
                            cb.setChecked(true);
                            Log.i(TAG, "Name " + MemberName);
                            // Name = ItemsArr.get(i).getItemName().toString();
                            //Log.i(TAG, "Name " + Name);
                        }
                    }
                } else if (!cb.isChecked()) {

                }    
            }    
        });

Unless you store the state somewhere, every time you go back to the list it will be treated like a new instance. 除非将状态存储在某个位置,否则每次返回列表时,它将被视为新实例。 As a result all boxes will go back to being unchecked. 结果,所有框都将恢复为未选中状态。

When you go away from the list, save the checked values to some sort of persistent storage, like device storage, or pass the state of the boxes to the screen you're going to so that it can be passed back to the list when navigating back. 当您离开列表时,将检查的值保存到某种持久性存储(例如设备存储)中,或将框的状态传递到您要访问的屏幕,以便在导航时可以将其传递回列表背部。 Alternatively save them to a variable that has global scope and won't fall out of scope when moving screens. 或者将它们保存到具有全局范围的变量,并且在移动屏幕时不会超出范围。

When you go back to the list, see if there's a state to be used (either in the device storage, passed in as a parameter, or whatever means of persistence you use) then use it to re-check the appropriate boxes. 当您返回列表时,请查看是否存在要使用的状态(在设备存储中,作为参数传递或使用任何持久性方式),然后使用它重新检查相应的框。

Try this. 尝试这个。 I have edit your code 我已经编辑了您的代码

 private static Map<Integer, Boolean> mapCheck = new HashMap<Integer, Boolean>();
     holder.UserId_Fk.setText(tempValues.getUserId_Fk().toString());
        holder.chkbox.setOnCheckedChangeListener(null);

        holder.chkbox.setChecked(checkedHolder[position]);
        Log.i(TAG, "Position " + checkedHolder[position]);

        if (checkedHolder[position])
            holder.chkbox.setChecked(true);
        else
            holder.chkbox.setChecked(false);

        holder.chkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView,
                            boolean isChecked) {
            mapCheck.put(position, true);
                        checkedHolder[position] = isChecked;
                        Log.i(TAG, "Position " + checkedHolder[position]);
                    }
                });

And this: 和这个:

list.setOnItemClickListener(new OnItemClickListener() {

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

            CheckBox cb = (CheckBox) view.findViewById(R.id.chkbox);

            cb.performClick();

            if (cb.isChecked()) {
        /*
                for (int i = 0; i < adapter.getCount(); i++) {
                    if (adapter.checkedHolder[i]) {
                        // get all name values that checked by user
                        MemberName.clear();
                        MemberName.add(ItemsArr.get(i).getItemName().toString());
                        cb.setChecked(true);
                        Log.i(TAG, "Name " + MemberName);
                        // Name = ItemsArr.get(i).getItemName().toString();
                        //Log.i(TAG, "Name " + Name);
                    } */

          //SEARCH POSITION WHERE ARE TRUE
           for(Integer i : mapCheck.keySet())
            {
          if(mapCheck.get(i) == true)
           {
             cb.setChecked(true);
           }
          }
                }
            } else if (!cb.isChecked()) {

            }

        }

    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM