0

Romain Guy's answerRaghunandan'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의 다른 부분 (예 : "안녕하세요")는 항상 실행 최고 주문.

내가 어디에서 잘못했는지 누군가가 알 수 있습니까?

감사

+0

에은을 위해 (; 내가 data.length입니다을 <나는 = 0 int로 내가 ++) {' ?? 모든 확인란을 모두 선택하지 않으면 else가 실행됩니다. – Raghunandan

답변

1

변경하여

for (int i = 0; i < mAdapter.mCheckStates.size(); i++) { 

당신은`이것으로하려고하면 어떻게되는지

for (int i = 0; i < data.length; i++) { 
+0

멋진 솔루션. 그 밖의 많은 부분으로 마지막 데이터가 표시됩니다. 즉 마지막 행을 클릭하면 마지막 데이터가 표시되고 3 개의 "hi"행은 4 행이 표시됩니다. 내가 3 행을 clck 할 때 2 개의 추가 "hi"가있는 값을 표시합니다. 변경 사항이 있거나 else 부분을 삭제해야합니다. – Ranjit

+0

@RanjitPati else 부분은 필요 없습니다. 축배는 단지 확인을위한 것입니다. 그래서 검사하지 않은 항목은 필요 없습니다. – Raghunandan

+0

나중에 그 .. 감사합니다. – Ranjit

관련 문제