Android ListView 슬라이딩 삭제 작업(SwipeListView)
이 편 은 주로 SwipeListView 라 는 오픈 소스 프레임 워 크 를 배 웁 니 다.
이 프레임 워 크 를 사용 하 는 방법 은 두 가지 가 있 습 니 다.하 나 는 SwipeListView Library 라 이브 러 리 를 가 져 와 안 드 로 이 드 프로젝트 의 의존 라 이브 러 리 로 사용 하 는 것 입 니 다.SwipeListView Library 라 이브 러 리 프로젝트 자체 도 다른 인기 있 는 오픈 소스 프레임 워 크 인 Nine Old Androids 에 의존 하기 때문에 이것 도 인터넷 이나 github 에서 쉽게 찾 을 수 있 습 니 다.
이 두 개의 라 이브 러 리 프로젝트 를 가 져 옵 니 다.Nine Old Androids 에 대해 다음 과 같은 설정 을 합 니 다.사실은 주로 Is Library 라 는 옵션 을 선택 하면 Nine Old Androids 프로젝트 를 다른 프로젝트 의 의존 라 이브 러 리 로 사용 할 수 있 습 니 다.
SwipeListView Library 에 대해 서 는 Is Library 옵션 을 선택 하 는 것 외 에 옆 에 있 는 Add 에 Nine Old Androids 를 본 라 이브 러 리 의 의존 라 이브 러 리 로 추가 하 는 것 을 기억 하 십시오.
다음은 이 라 이브 러 리 를 사용 하 는 것 입 니 다.먼저 위의 두 라 이브 러 리 공 사 를 클 린 하 세 요.공사 의 오류 가 많 을 때 클 린 하면 됩 니 다.그리고 자신의 프로젝트 를 새로 만 들 고 Add 옵션 에 SwipeListView Library 프로젝트 를 추가 하면 됩 니 다.이렇게 하면 SwipeListView 라 는 컨트롤 을 직접 사용 할 수 있 습 니 다.간단 합 니 다.코드 는 다음 과 같 습 니 다.
<com.fortysevendeg.swipelistview.SwipeListView
android:id="@+id/swipe_lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:swipeMode="left"
app:swipeAnimationTime="300"
app:swipeOffsetLeft="200dp"
app:swipeFrontView="@+id/front"
app:swipeBackView="@+id/back"
app:swipeActionLeft="reveal"/>
그 중에서 app:swipeFrontView 속성 은 앞에서 말 한 framelayot 의 위 에 있 는 view 의 id 를 지정 하 는 것 입 니 다.app:swipeBackView 는 아래 층 의 view 를 지정 하 는 id 입 니 다.아래 에 BaseAdatpter 가 사용 할 item 의 레이아웃 을 사용자 정의 하면 볼 수 있 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:id="@+id/back"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/close_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/delete_btn"
android:text="Close"
android:textAppearance="?android:attr/textAppearanceMedium"
android:focusable="false"
android:focusableInTouchMode="false"/>
<Button
android:id="@+id/delete_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:text="Delete"
android:textAppearance="?android:attr/textAppearanceMedium"
android:focusable="false"
android:focusableInTouchMode="false"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/front"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<TextView
android:id="@+id/content_tv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="hello world"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@android:color/black"/>
</RelativeLayout>
</FrameLayout>
Activity 에서 초기 화 된 코드:
arrays = new ArrayList<String>(Arrays.asList(Util.arrays));
mSwipeLv = (SwipeListView)findViewById(R.id.swipe_lv);
mAdapter = new MyAdapter(this, arrays);
mSwipeLv.setAdapter(mAdapter);
mSwipeLv.setSwipeListViewListener(new BaseSwipeListViewListener() {
@Override
public void onClosed(int position, boolean fromRight) {
}
});
BaseAdapter 의 getView()사용자 정의:
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
ViewHolder holder;
if(convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(
R.layout.layout_swipe_list_item, null);
holder.mContentTv = (TextView)convertView.findViewById(R.id.content_tv);
holder.mCloseBtn = (Button)convertView.findViewById(R.id.close_btn);
holder.mDeleteBtn = (Button)convertView.findViewById(R.id.delete_btn);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.mContentTv.setText(arrays.get(position));
holder.mCloseBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((SwipeListView)parent).closeAnimate(position);
}
});
holder.mDeleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((SwipeListView)parent).closeOpenedItems();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mArrays.remove(position);
mAdapter.notifyDataSetChanged();
}
}, 350);
}
});
return convertView;
}
그리고 ok 입 니 다.프로젝트 를 실행 하 는 효 과 는 다음 과 같 습 니 다. 다른 하 나 는 SwipeListView 컨트롤 을 사용 하 는 방법 은 공식 적 으로 제 시 된 두 개의 jar 가방 을 직접 가 져 오 는 것 입 니 다.위 에 있 는 시작 주소 에서 볼 수 있 지만 이 두 개의 jar 가방 을 직접 가 져 오 는 것 은 바로 사용 할 수 있 는 것 이 아 닙 니 다!우선 이 가방 을 새 프로젝트 의 build path 에 추가 합 니 다.프로젝트 에 안 드 로 이 드 지원 패키지 가 추가 되 지 않 았 다 면 안 드 로 이 드-슈퍼 포트-v4.jar 기억 도 아래 와 같 습 니 다.그리고 앞에서 가 져 온 SwipeListView Library 라 이브 러 리 프로젝트 의 res\values\swipelistviewattrs.xml 파일 을 새 프로젝트 의 res/values/디 렉 터 리 에 복사 합 니 다.이 파일 은 주로 SwipeListView 컨트롤 의 각 속성 을 설명 합 니 다.직접 가 져 온 jar 패 키 지 는 이러한 속성 을 설명 하 는 파일 이 포함 되 어 있 지 않 습 니 다.그 다음 에 위 와 같이 코드 에서 인용 되 었 습 니 다.그러나 두 가 지 를 주의해 야 합 니 다.하 나 는 jar 가방 안에 있 는 SwipeListView 의 가방 이름과 라 이브 러 리 프로젝트 에 있 는 가방 이름 이 다 릅 니 다.인용 할 때 다음 과 같이 주의해 야 합 니 다.둘째,준비 가 다 되 었 습 니 다.앞의 절차 가 틀 리 지 않 았 음 을 확인 한 후에 가끔 은 컴 파일 할 때 잘못 되 었 습 니 다.swipeFrontView 와 swipeBackView 두 가지 속성 을 밝 히 지 않 았 다 고 합 니 다.이 문 제 는 SwipeListView 프레임 워 크 의 bug 인 것 같 습 니 다.stackoverflow 에서 지적 한 바 와 같이 레이아웃 파일 에 swipeFrontView 와 swipeBackView 라 는 두 가지 속성 을 밝 힐 만 한 가치 가 있 을 때 입 니 다.id 의 이름 을 사용자 정의 하지 않 고 swipelistview 를 사용 하 는 것 이 좋 습 니 다.backview 와 swipelistviewfrontview。
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.