>  기사  >  Java  >  Android 개발 시 SwipeMenuListView 측면 슬라이딩 삭제 장애 버그를 기억하세요.

Android 개발 시 SwipeMenuListView 측면 슬라이딩 삭제 장애 버그를 기억하세요.

高洛峰
高洛峰원래의
2017-01-13 10:05:511439검색

슬라이딩을 모니터링하기 위해 Listview를 다시 작성하는 등 슬라이딩 삭제를 위한 솔루션이 많이 있습니다. 오늘은 친구가 온라인에서 오픈 소스로 제공한 캡슐화된 구성 요소에 대해 이야기하겠습니다. 프로젝트 주소: https://github.com/baoyongzhang/SwipeMenuListView, 저도 차용 원칙을 채택하여 직접 사용했습니다.

그런데 데이터 슬라이딩 삭제 디버깅을 하다가 문제가 발생했습니다. 첫 번째 데이터는 삭제됐는데 마지막 데이터는 삭제됐네요. 그래서 문제점을 찾기 위해 먼저 시도해 봤습니다. listview로 확인해 보니 데이터에는 문제가 없으니 삭제 과정에서 삭제된 컨트롤의 위치가 잘못 계산된 것입니다. 먼저 두 가지 렌더링을 보여드리겠습니다.

그래서 문제가 발생한 이유는 무엇일까요? 이전에 제출한 버전을 살펴보니(최근 제출된 문제였다고 이전에 사용하기 좋았던 기억이 나네요) 문제가 발견되었습니다. SwipeMenuAdapter 클래스의 getview 메소드가 이전보다 작습니다. 캐싱을 위한 판단이 하나 더 추가되었습니다. 판단 조건을 제거하고 다시 실행해 보았습니다.

public View getView(int position, View convertView, ViewGroup parent) { 
SwipeMenuLayout layout = null; 
// if (convertView == null) { 
View contentView = mAdapter.getView(position, convertView, parent); 
SwipeMenu menu = new SwipeMenu(mContext); 
menu.setViewType(getItemViewType(position)); 
createMenu(menu); 
SwipeMenuView menuView = new SwipeMenuView(menu, 
(SwipeMenuListView) parent); 
menuView.setOnSwipeItemClickListener(this); 
SwipeMenuListView listView = (SwipeMenuListView) parent; 
layout = new SwipeMenuLayout(contentView, menuView, 
listView.getCloseInterpolator(), 
listView.getOpenInterpolator()); 
layout.setPosition(position); 
// } else { 
// layout = (SwipeMenuLayout) convertView; 
// layout.closeMenu(); 
// layout.setPosition(position); 
//// View view = mAdapter.getView(position, layout.getContentView(), 
//// parent); 
// } 
if (mAdapter instanceof BaseSwipListAdapter) { 
boolean swipEnable = (((BaseSwipListAdapter) mAdapter).getSwipEnableByPosition(position)); 
layout.setSwipEnable(swipEnable); 
} 
return layout; 
}

위 코드는 다음과 같습니다. 안드로이드 에디터님이 소개해주신 SwipeMenuListView 사이드 슬라이딩 삭제 관련 버그가 있어 많은 분들께 도움이 되었으면 좋겠습니다. 궁금한 사항이 있으시면 메시지를 남겨주시면 에디터가 시간 맞춰 답변해드리겠습니다. PHP 중국어 웹사이트에 대한 여러분의 지원에 진심으로 감사드립니다!

Android 개발 시 SwipeMenuListView 측면 슬라이딩 삭제 버그에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.