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有什么错误吗?