Java 如果以前选中了复选框,如何选中该复选框

Java 如果以前选中了复选框,如何选中该复选框,java,android,checkbox,Java,Android,Checkbox,我已经实现了一个列表中的复选框,有一个带名称的复选框。我的问题是,我会选择五个名字,然后我会显示这些名字,然后如果我回到列表,这五个名字应该再次被选中,因为我已经选择了这些名字 但现在,当我再次访问时,这些都未经检查。如何做到这一点 我的适配器代码。 holder.UserId_Fk.setText(tempValues.getUserId_Fk().toString()); holder.chkbox.setOnCheckedChangeListener(nu

我已经实现了一个列表中的复选框,有一个带名称的复选框。我的问题是,我会选择五个名字,然后我会显示这些名字,然后如果我回到列表,这五个名字应该再次被选中,因为我已经选择了这些名字

但现在,当我再次访问时,这些都未经检查。如何做到这一点

我的适配器代码。

     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]);
                        }
                    });
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()) {

                }    
            }    
        });
我的活动代码..

     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]);
                        }
                    });
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()) {

                }    
            }    
        });
list.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
复选框cb=(复选框)view.findViewById(R.id.chkbox);
cb.performClick();
if(cb.isChecked()){
对于(inti=0;i
除非将状态存储在某个位置,否则每次返回列表时,它都会被视为一个新实例。因此,所有框都将返回为未选中状态

当您离开列表时,将选中的值保存到某种持久性存储中,如设备存储,或者将框的状态传递到您要访问的屏幕,以便在返回时将其传递回列表。或者,将它们保存到具有全局范围的变量中,并且在移动屏幕时不会超出范围


返回列表时,查看是否有要使用的状态(在设备存储中,作为参数传入,或使用任何持久性方法),然后使用它重新选中相应的框。

尝试此操作。我已经编辑了你的代码

 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]);
                    }
                });
private static Map mapCheck=new HashMap();
holder.UserId_Fk.setText(tempValues.getUserId_Fk().toString());
holder.chkbox.setOnCheckedChangeListener(null);
holder.chkbox.setChecked(checkedHolder[位置]);
日志i(标签,“位置”+检查持有人[位置]);
如果(选中的保持架[位置])
holder.chkbox.setChecked(true);
其他的
holder.chkbox.setChecked(假);
holder.chkbox.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,
布尔值(已检查){
地图检查。放置(位置,正确);
已检查的保持架[位置]=已检查;
日志i(标签,“位置”+检查持有人[位置]);
}
});
这是:

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()) {

            }

        }

    });
list.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
复选框cb=(复选框)view.findViewById(R.id.chkbox);
cb.performClick();
if(cb.isChecked()){
/*
对于(inti=0;i
您可以使用映射,当调用该方法时,会转到“重新选择”已选中的复选框,因此,如果整数位置的布尔值为true,请将复选框设置为true。您必须保存它们的位置。您不应该问是否可以为您编辑代码,因为据我们所知,这可能是一个家庭作业问题。你应该要求举例说明这个概念或链接到有用的页面。如果有人只是简单地编辑了你的代码,而你只是接受它在工作,但不知道它为什么在工作,你就不会知道了。在本例中,我建议您查找有关范围和持久性的主题。最简单的可能是全球范围界定。当您准备离开时,请抓取每个复选框的选中状态,并将其存储在列表、映射或其他集合变量中。不知道你的程序的确切结构,我不能说把这个集合放在哪里,但它必须在列表可以访问的地方,并且在你返回列表时不会结束或停止使用。是的,@ForceGaia是对的,你需要保存复选框的状态,这样你才能恢复状态。你可以查看这个链接,朋友:)@Simon有什么错误吗?