Android 如何保持自定义对话框中的listview复选框状态保持不变
在我创建的自定义对话框中有一个listview。该列表视图中有两个文本视图和一个复选框。当我关闭对话框并重新打开它时,所有选中的复选框都将取消选中,我希望这些复选框处于选中状态,但当前处于取消选中状态。请帮助Android 如何保持自定义对话框中的listview复选框状态保持不变,android,Android,在我创建的自定义对话框中有一个listview。该列表视图中有两个文本视图和一个复选框。当我关闭对话框并重新打开它时,所有选中的复选框都将取消选中,我希望这些复选框处于选中状态,但当前处于取消选中状态。请帮助 public void myListView() throws Exception { final JSONArray jArray = nominationQuery(); final Dialog dialog = new Dialog(mContext); d
public void myListView() throws Exception {
final JSONArray jArray = nominationQuery();
final Dialog dialog = new Dialog(mContext);
dialog.setContentView(R.layout.user_custom_dialog);
userTextView = (ListView) dialog.findViewById(R.id.userNominationList);
userTextView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
userAdapter = new UserAdapter(mContext, R.layout.user_list_row, jArray);
userTextView.setAdapter(userAdapter);
dialog.setTitle(AppConstants.NOMINATE_TITLE);
dialog.show();
dialog.setCanceledOnTouchOutside(false);
Window window = dialog.getWindow();
window.setLayout(400, 500);
Button submit = (Button) dialog.findViewById(R.id.submitButton);
submit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<String> selectedUser = new ArrayList<String>();
if (userAdapter.mCheckStates.size() > 0) {
for (int i = 0; i < userAdapter.getCount(); i++) {
if (userAdapter.mCheckStates.get(i) == true) {
String user = null;
try {
user = jArray.getJSONObject(i).get(NAME)
.toString();
} catch (JSONException e) {
e.printStackTrace();
}
selectedUser.add(user);
}
}
}
if (selectedUser.size() > 0) {
NominationAdapter nominationAdapter = new NominationAdapter(
mContext, R.layout.user_nominated, selectedUser);
nominateListView.setAdapter(nominationAdapter);
dialog.dismiss();
} else{
Toast.makeText(mContext, AppConstants.SELECT_THE_USER,
Toast.LENGTH_SHORT).show();
}
}
});
Button closeButton = (Button) dialog.findViewById(R.id.closeButton);
closeButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.cancel();
}
});
}
可能有一个bug,从您发布的代码片段中看不到。您有一个
userJson
对象,只有当它不为null时才调用userHolder.chkBox.setChecked()
,但我在代码中没有看到任何对userJson
的赋值
您可能应该更改以下代码:
try {
if (userJson != null) {
jsonObj = userJson.getJSONObject(position);
String userText = jsonObj.getString(NAME);
String idText = jsonObj.getString(EMAIL);
// userHolder.textView.setTag(userText);
userHolder.nameTextView.setText(userText);
userHolder.idTextView.setText(idText);
userHolder.chkBox.setTag(position);
userHolder.chkBox.setChecked(mCheckStates.get(position, false));
userHolder.chkBox.setOnCheckedChangeListener(this);
}
} catch (JSONException e) {
e.printStackTrace();
}
致:
因此,每当调用
getView
时,都会设置userHolder
的所有属性,否则您将看到过时的数据。可能重复的是,我想我需要在代码中执行此操作。但我的问题仍然是一样的。一定有一个微妙的错误,请继续搜索。
try {
if (userJson != null) {
jsonObj = userJson.getJSONObject(position);
String userText = jsonObj.getString(NAME);
String idText = jsonObj.getString(EMAIL);
// userHolder.textView.setTag(userText);
userHolder.nameTextView.setText(userText);
userHolder.idTextView.setText(idText);
userHolder.chkBox.setTag(position);
userHolder.chkBox.setChecked(mCheckStates.get(position, false));
userHolder.chkBox.setOnCheckedChangeListener(this);
}
} catch (JSONException e) {
e.printStackTrace();
}
String userText, idText;
try {
if (userJson != null) {
jsonObj = userJson.getJSONObject(position);
userText = jsonObj.getString(NAME);
idText = jsonObj.getString(EMAIL);
}
} catch (JSONException e) {
e.printStackTrace();
userText = ""; // put value for case when userJson is null here
idText = "";
}
// userHolder.textView.setTag(userText);
userHolder.nameTextView.setText(userText);
userHolder.idTextView.setText(idText);
userHolder.chkBox.setTag(position);
userHolder.chkBox.setChecked(mCheckStates.get(position, false));
userHolder.chkBox.setOnCheckedChangeListener(this);