이 질문은 StackOverflow의 다른 많은 질문과 매우 유사하지만 여기서는 다른 질문과 비교하여 접근 방식이 다르기 때문에 자체 게시물이 적합하다고 생각합니다.CursorAdapter의 커서를 변경하면 목록 항목보기가 제대로 업데이트되지 않는다
CursorAdapter
을 확장하는 사용자 지정 어댑터가 있습니다. 데이터를 업데이트하고 해당 URI에서 notifyChange
을 호출하여 커서를 새로 고침합니다. 디버깅에서 이것이 제대로 작동하는지 알 수 있습니다.
불행히도 내 목록보기가 다시 만들어지지 않습니다. 나는 그들을 다시 작성해야하는 이유는 어댑터에 내 newView
구현이다 :
public View newView(final Context context, final Ingredient ingredient, final ViewGroup parent) {
final int layout = ingredient.isOwned() ? LAYOUT_OWNED : LAYOUT_UNOWNED;
final View view = LayoutInflater.from(context).inflate(layout, null);
// ... ViewHolder magic
return view;
}
문제는 notifyChange
를 호출하면 목록 데이터를 업데이트하는 것을이지만, 내가 newView
를 통해 필요로하는보기를 다시하지 않습니다 . 데이터가 업데이트 된 후
- 이
adapter.notifyDataSetChanged()
전화 :는 여기에 내가 똑같이 작동하지 않았다 시도 다른 것들입니다.
contentResolver.notifyChange(...)
다음에 데이터가 업데이트 된 후adapter.notifyDataSetChanged()
이 표시됩니다.- 은
adapter.changeCursor(newCursor)
이고, 그 다음은adapter.notifyDataSetChanged()
이다. - 변경된 특정 목록 항목에
view.invalidate()
이라고합니다.
다른 접근 방법에 대한 제안 사항은 무엇입니까?
편집 : 나는 잘못된 접근 방식을 취하고 있습니다. 나는 어댑터 내에서의 뷰의 재사용에 대해 오해하고있다. 그리고 나는 잘못된 유형의 뷰가 재활용 될 때 사용되는 것을 본다. 따라서 다른 접근 방식을 사용하여 내 견해를 스타일링해야 할 필요가있을 것입니다. 첫 번째로이 접근법을 사용하는 이유는 스타일을 사용하려는 나의 욕구 때문입니다.이 스타일은 뷰를 풍선을 explained in this StackOverflow question으로 팽창시키는 것 외에도 프로그래밍 방식으로 설정할 수 없습니다. 필자는 목록 항목보기를 적절하게 재활용하면서 해당 답변을 활용할 수있는 방법에 대해 공개적입니다.