방금 Android 개발로 시작하여 지금까지 좋아했습니다. 약간의 경험을 얻으려면, 나는 약간의 할 일을 작성하고있다. 내 데이터베이스에서 나는 int로 표현되는 할 일 항목에 대한 상태를가집니다. 이 상태를 나타 내기 위해 목록보기에서 체크 박스를 사용합니다. 뷰를 에 바인딩하려면 SimpleCursorAdapter의 하위 클래스를 사용합니다. 사용 된 목록 항목에 대해 데이터베이스의 상태를 업데이트하는 확인란에 onClickListener를 추가합니다.Android SimpleCursorAdapter 및 데이터베이스 업데이트
@Override
public View getView(final int pos, View inView, ViewGroup parent) {
View view = inView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.toodoolist_item, null);
}
cursor.moveToPosition(pos);
...
checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int state = 0;
if (checkBox.isChecked()) {
titleView.setPaintFlags(titleView.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
titleView.setEnabled(false);
state = 1;
} else {
titleView.setPaintFlags(titleView.getPaintFlags()
^Paint.STRIKE_THRU_TEXT_FLAG);
titleView.setEnabled(true);
}
ContentValues values = new ContentValues();
values.put(TooDooTable.STATE, state);
context.getContentResolver()
.update(ContentUris.withAppendedId(
TooDooTable.CONTENT_URI, id), values, null, null);
cursor.requery();
}
}
나의 현재 해결 방법은 심지어 을 경우마다 인플레이터를 사용하는 것입니다 : 문제는 그 다음 코드를 사용하는 경우, 목록이 (많은 항목이 선택됩니다) 디스플레이에 나사 고정입니다 inView가 null이 아닙니다.
@Override
public View getView(final int pos, View inView, ViewGroup parent) {
View view = inView;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.toodoolist_item, null);
...
이 작동하지만 왜이 해킹을해야하는지 이해할 수 없습니다.
CurserAdapter에서 데이터베이스를 업데이트하고 변경 사항을 뷰에서 즉시 반영하는 것이 가장 좋은 방법은 무엇입니까? 이전 방법이 아무것도하지 않는 경우
감사
카이