TestListActivity.java
TestListAdapter mCustomAdapter; mCustomAdapter = new TestListAdapter(TestNews.this, lDataList, R.layout.test_datalist, from, to); mLv_TestList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); mLv_TestList.setAdapter(mCustomAdapter);
TestListAdapter.java
public class TestListAdapter extends SimpleAdapter { private List<Map<String, String>> mArrayList; private int mResource; // Layout ID private Context mContext; ViewHolder holder; ArrayList<Boolean> array; public TestListAdapter(Context context, List<Map<String, String>> lDataListFix, int resource, String[] from, int[] to) { super(context, lDataListFix, resource, from, to); mArrayList = lDataListFix; mResource = resource; mContext = context; } @Override public int getCount() { return mArrayList.size(); } @Override public Object getItem(int position) { return mArrayList.get(position).get("msg") + "<" + mArrayList.get(position).get("date") + ">"; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = vi.inflate(mResource, null); holder = new ViewHolder(); holder.msg = (TextView) convertView.findViewById(R.id.msg); holder.date = (TextView) convertView.findViewById(R.id.date); holder.cb_checkbox = (CheckBox) convertView.findViewById(R.id.cb_checkbox); convertView.setTag(holder); } else holder = (ViewHolder) convertView.getTag(); Map<String, String> iItem = mArrayList.get(position); holder.tv_Msg.setText(iItem.get("msg")); holder.tv_CreateDate.setText(iItem.get("date")); holder.cb_checkbox.setChecked(false); holder.cb_checkbox.setChecked(((ListView)parent).isItemChecked(position)); return convertView; } } class ViewHolder { TextView msg; TextView date; CheckBox cb_checkbox; }
여기까지 별반 다르지 않았다. 체크박스 까지는 무난하게 만들지만 리스트가 늘어나면 문제가 생겼다.
체크하지 않았는데도 체크가되거나 스크롤 내리면 체크한 리스트에서 체크가 해제되어 보여졌다.
실제로는 체크가되어있었다.
인터넷에 많이 찾아봤지만 명쾌한 답이잘 없다. 결국 해결한건
holder.cb_checkbox.setChecked(((ListView)parent).isItemChecked(position));
한줄이다.
TestListActivity.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" > <TextView android:id="@+id/msg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dip" android:layout_marginRight="10dip" android:textColor="@color/black" android:textSize="17dp" android:textStyle="bold" /> <TextView android:id="@+id/date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dip" android:layout_marginRight="10dip" android:textColor="@color/text3" /> </LinearLayout> <CheckBox android:id="@+id/cb_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:focusable="false" android:clickable="false"/> </LinearLayout>
'programing' 카테고리의 다른 글
[안드로이드] SMS, MMS보내기 (1) | 2012.11.23 |
---|---|
[안드로이드]서버와 통신하기 HttpPost, Loading처리 (0) | 2012.11.23 |
[기타]YTN 뉴스 동영상 저장하는법 (0) | 2012.10.04 |
[C언어]Torboc.h 파일 인스톨러 (0) | 2012.08.11 |
[안드로이드] ListView의 글자색 폰트 변경하는 방법 (0) | 2012.08.09 |