내 목록에 SwipeListView 라이브러리를 사용하고 있습니다. List Adapter가 ViewHolder Pattern을 사용하고 있습니다. 모든 것이 잘 작동합니다. 왼쪽으로 스 와이프를 설정하고 내 목록 항목보기 아래에 다시보기가 있습니다. 이 뒷면에는 텍스트보기 "삭제"가 있습니다. 클릭 후 삭제 작업이 수행됩니다. 어댑터의 데이터가 새로 고쳐집니다. 행이 삭제됩니다. 그러나 삭제 된 행에 가까운 위치에있는 행에 "스 와이프 상태"가 설정됩니다. 나는 "훔친 국가"가 convertview에 의해 기억되기 때문에 일어난다 고 믿습니다. convertview가 null인지 점검 할 때 주석 처리를하면 문제점은 사라지지만 목록 스크롤 성능은 용납되지 않습니다. 삭제 작업 후에 convertview를 삭제할 수있는 방법이 있습니까? 아니면 다른 작업이 있습니까?행을 삭제 한 후 SwipeListView는 "스 와이프 상태"로 유지됩니다.
내 ViewHolder :
public static <T extends View> T get(View view, int id) {
SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
if (viewHolder == null) {
viewHolder = new SparseArray<View>();
view.setTag(viewHolder);
}
View childView = viewHolder.get(id);
if (childView == null) {
childView = view.findViewById(id);
viewHolder.put(id, childView);
}
return (T) childView;
}
내 어댑터의 getView() :
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context)
.inflate(R.layout.level_item, parent, false);
}
...
...
del = ViewHolderNew.get(convertView, R.id.del);
del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Level level = list.get(position);
long id = level.getId();
Level leveltoDelete = Level.load(Level.class, id);
new Delete().from(Recipient.class).where("level = ?", id).execute();
leveltoDelete.delete();
remove(level);
notifyDataSetInvalidated();
}
});
그리고 내 xml 파일 :
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="0dp"
android:background="@color/white_background"
>
//item back layout
<LinearLayout
android:id="@+id/item_back"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/del"
android:layout_width="match_parent"
android:layout_height="180dp"
android:gravity="center_vertical|right"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:background="@color/delete_background"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:paddingRight="30dp"
android:textColor="@color/white_background"
android:text="Delete"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
//item front layout
<RelativeLayout
android:id="@+id/item_front"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
코드를 게시하십시오. – iRuth