Romain Guy's answer 및 Raghunandan's answer의 도움으로 하나의 체크 박스와 각 행에 하나의 텍스트 상자가 포함 된 listview를 준비했습니다.ListView 내의 체크 박스 상태가 안드로이드에서 역순으로 작동하지 않습니다
위에서 아래로 순서대로 각 확인란을 선택하면 (즉 각 행 데이터가 표시됨), 마지막 행과 이전 행을 선택하면 공백 만 표시됩니다.
내 두 클래스 :
ShowCurrentStatus.java
private AlertDialog leaveDialog(View view, int icon, String title,
final String[] data) {
final FilterAdapter mAdapter = new FilterAdapter(ShowCurrentStatus.this,R.layout.customleavetypefilter, data);
AlertDialog dialog;
AlertDialog.Builder builder = new AlertDialog.Builder(
ShowCurrentStatus.this);
builder.setIcon(icon);
builder.setTitle(title);
builder.setView(view);
ListView mListView = (ListView) view
.findViewById(R.id.listViewleavetypefilter);
mListView.setCacheColorHint(Color.TRANSPARENT);
mListView.setAdapter(mAdapter);
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < mAdapter.mCheckStates.size(); i++) {
if (mAdapter.mCheckStates.get(i) == true) {
result.append(data[i]);
result.append("\n");
} else {
result.append("hi");
}
}
Toast.makeText(ShowCurrentStatus.this, result, Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog = builder.create();
return dialog;
}
FilterAdapter.java
public class FilterAdapter extends ArrayAdapter<String> implements CompoundButton.OnCheckedChangeListener {
SparseBooleanArray mCheckStates;
private String[] mData;
private Context mContext;
int layoutResourceId;
public FilterAdapter(Context mContext,int layoutResourceId, String[] mData) {
super(mContext, layoutResourceId, mData);
this.layoutResourceId = layoutResourceId;
this.mContext = mContext;
this.mData = mData;
mCheckStates = new SparseBooleanArray(mData.length);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
MyViewHolder mMyViewHolder;
if (view == null) {
LayoutInflater inflater = ((Activity)mContext).getLayoutInflater();
view = inflater.inflate(layoutResourceId, parent, false);
mMyViewHolder = new MyViewHolder(view);
view.setTag(mMyViewHolder);
} else {
mMyViewHolder = (MyViewHolder) view.getTag();
}
mMyViewHolder.name.setText(mData[position]);
mMyViewHolder.name.setTextColor(Color.CYAN);
mMyViewHolder.check.setTag(position);
mMyViewHolder.check.setChecked(mCheckStates.get(position, false));
mMyViewHolder.check.setOnCheckedChangeListener(this);
return view;
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mCheckStates.put((Integer) buttonView.getTag(), isChecked);
}
private class MyViewHolder {
TextView name;
CheckBox check;
MyViewHolder(View mView) {
name = (TextView) mView
.findViewById(R.id.textViewAddDataSelectMultiple);
check = (CheckBox) mView.findViewById(R.id.checkBoxSelectMultiple);
}
}
public boolean isChecked(int position) {
return mCheckStates.get(position, false);
}
public void setChecked(int position, boolean isChecked) {
mCheckStates.put(position, isChecked);
notifyDataSetChanged();
}
public void toggle(int position) {
setChecked(position, !isChecked(position));
}
내가 바닥에서 확인하면 mAdapter.mCheckStates.get(i) == true
의 다른 부분 (예 : "안녕하세요")는 항상 실행 최고 주문.
내가 어디에서 잘못했는지 누군가가 알 수 있습니까?
감사
에은을 위해 (; 내가 data.length입니다을 <나는 = 0 int로 내가 ++) {' ?? 모든 확인란을 모두 선택하지 않으면 else가 실행됩니다. – Raghunandan