我在創建的自定義對話框中有一個列表視圖。在該列表視圖中有兩個textview和一個複選框。當我關閉對話框並重新打開它,所有的選擇checkboxces獲得未選擇的,我想在選中狀態的複選框,但目前越來越unselected.Please幫助如何保持列表視圖複選框狀態持續存在於自定義對話框中
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();
}
});
}
和我的用戶Adapter類
@Override
public View getView(int position, View userView, ViewGroup parent) {
View row = userView;
NominationUserViewHolder userHolder;
JSONObject jsonObj;
if (row == null) {
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
row = inflater.inflate(resourceId, parent, false);
userHolder = new NominationUserViewHolder();
userHolder.nameTextView = (TextView) row
.findViewById(R.id.nameView);
userHolder.idTextView = (TextView) row.findViewById(R.id.idView);
userHolder.chkBox = (CheckBox) row.findViewById(R.id.checkBoxView);
row.setTag(userHolder);
row.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
NominationUserViewHolder uvv = (NominationUserViewHolder) view.getTag();
// CheckBox cb = (uvv.chkBox) view.getTag();
if (uvv.chkBox.isChecked()) {
uvv.chkBox.setChecked(false);
} else {
uvv.chkBox.setChecked(true);
}
}
});
} else {
userHolder = (NominationUserViewHolder) row.getTag();
}
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();
}
return row;
}
public boolean isChecked(int position) {
return mCheckStates.get(position, false);
}
public void setChecked(int position, boolean isChecked) {
mCheckStates.put(position, isChecked);
}
public void toggle(int position) {
setChecked(position, !isChecked(position));
}
@Override
public int getCount() {
return userJson != null ? userJson.length() : 0;
}
class NominationUserViewHolder {
TextView nameTextView;
TextView idTextView;
CheckBox chkBox;
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//toggle((Integer) buttonView.getTag());
mCheckStates.put((Integer) buttonView.getTag(), isChecked);
}
}
[實現與複選框對話框]可能的重複(http://stackoverflow.com/questions/17859514/implementing-dialog-box-with-checkboxes) – 0X0nosugar