日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用swipelistview完成qq聊天列表右滑删除功能

發布時間:2024/4/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用swipelistview完成qq聊天列表右滑删除功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

感謝HarryWeasley整理:http://blog.csdn.net/harryweasley/article/details/41413547

前言:前段時間,由于自己比較悠閑,沒有什么工作上的事情所做,所以當時就想,何不做一下qq聊天列表的item右滑出現后面的視圖,然后我就開始著手自己做,之后無意間發現了可以利用一個github開源項目swiplistview完成,但是當我查看那些swiplistview的相關文檔時,很不全面,github官網上下載的和之前他們寫的文檔已經有所不同,所以在這里我就重新來寫一下怎么使用swiplistview的準備階段。

之前的文檔都是說,當從官網上下載下來后,有兩個文件,一個是lib:android-swiplistview,另一個是例子:SwipListViewExampleActivity,但是現在下載后,解壓后是這樣的


顯然已經和之前的不一樣了,現在的官網上是用了gradle來構造Android程序,但我以前根本沒有接觸過gradle,所以只能自己去找以前的那個swiplistview。當時我也是糾結了很久,自己翻墻出去,各種Google,最后終于找到了,swiplistview,我之后會全部上傳,共享給大家。

下面是qq的效果圖:


下面是我這個項目的效果圖:


現在我們進入正題:

我們一共需要兩個jar包,一個swiplistview,如圖所示:這三個下載地址http://download.csdn.net/detail/harryweasley/8190519


1. 引入android-swipelistview庫:導入開源庫,用Import選項,然后Android選項下的“Existing Android Code Into Workspace”引入庫;在這里將“copy projects into workspace”前面打鉤哦

2.引入android-swipelistview的依賴庫nineoldandroids-2.4.0.jar:建立一個libs文件夾,將nineoldandroids-2.4.0.jar拷貝到libs文件夾之下;

3.引入android-swipelistview的依賴內部庫android-support-v4.jar:項目的Android Tools選項,“Add Support Library”來增加android-support-v4庫;(注:如果找不到對應的support庫,可以通過SDK Manager來進行下載)
4.編譯android-swipelistview庫的jar包:項目的Properties選項,Android選項,勾選"Is Library";
5.編譯android-swipelistview項目,在項目的bin目錄應該能看到android-swipelistview.jar包。


這樣,我們就完成了swiplistview的庫了。

然后我們自己建立一個Android程序SwipListView進行測試,建好后,開始導入庫,項目的Properties選項,Android選項,Library框選擇add按鈕添加swipelistview.jar包;

這里需要注意:swipelistview這個lib必須和SwiplistView在同一工作區間,否則導入的包前面會有紅叉。如圖所示



我們可以看下官網上關于SwipListView的描述

If you decide to use SwipeListView as a view, you can define it in your xml layout like this:

<com.fortysevendeg.swipelistview.SwipeListViewxmlns:swipe="http://schemas.android.com/apk/res-auto"android:id="@+id/example_lv_list"android:listSelector="#00000000"android:layout_width="fill_parent"android:layout_height="wrap_content"swipe:swipeFrontView="@+id/front"swipe:swipeBackView="@+id/back"swipe:swipeActionLeft="[reveal | dismiss]"swipe:swipeActionRight="[reveal | dismiss]"swipe:swipeMode="[none | both | right | left]"swipe:swipeCloseAllItemsWhenMoveList="[true | false]"swipe:swipeOpenOnLongPress="[true | false]"swipe:swipeAnimationTime="[miliseconds]"swipe:swipeOffsetLeft="[dimension]"swipe:swipeOffsetRight="[dimension]"/>
  • swipeFrontView?-?Required?- front view id. 即ListView Item正常顯示的控件Id,且必須與Item的布局文件中的控件id一樣
  • swipeBackView?-?Required?- back view id. ?手指滑動時顯示的,隱藏在FrontView后面,且必須與item的布局文件中控件Id一樣
  • swipeActionLeft?- Optional - left swipe action Default: 'reveal' ?左滑的動作,默認reveal,即顯示BackView,還有dismiss,choice會觸發響應的方法。
  • swipeActionRight?- Optional - right swipe action Default: 'reveal' 同上
  • swipeMode?- Gestures to enable or 'none'. Default: 'both' 設置左滑、右滑、都支持
  • swipeCloseAllItemsWhenMoveList?- Close revealed items on list motion. Default: 'true' 當滾動listview時,關閉所有展開的Item,最好不要設置為false,由于item的復用,false存在一些問題。
  • swipeOpenOnLongPress?- Reveal on long press Default: 'true' 長按時觸發顯示
  • swipeAnimationTime?- item drop animation time. Default: android configuration 動畫時間長度
  • swipeOffsetLeft?- left offset 左偏移量
  • swipeOffsetRight?- right offset 右偏移量
上面是基本屬性,下面開始上代碼:

首先是activity_main.xml下的代碼:

[java]?view plaincopy
  • <RelativeLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????xmlns:tools="http://schemas.android.com/tools"??
  • ????android:layout_width="match_parent"??
  • ????android:layout_height="match_parent"??
  • ????tools:context=".MainActivity"?>??
  • ??
  • ????<com.fortysevendeg.swipelistview.SwipeListView??
  • ????????xmlns:swipe="http://schemas.android.com/apk/res-auto"??
  • ????????android:id="@+id/example_lv_list"??
  • ????????android:layout_width="fill_parent"??
  • ????????android:layout_height="fill_parent"??
  • ????????swipe:swipeActionLeft="reveal"??
  • ????????swipe:swipeBackView="@+id/id_back"??
  • ????????swipe:swipeCloseAllItemsWhenMoveList="true"??
  • ????????swipe:swipeFrontView="@+id/id_front"??
  • ????????swipe:swipeMode="left"??
  • ????????swipe:swipeOffsetLeft="200dip"??
  • ????????swipe:swipeOffsetRight="0dp"??
  • ????????swipe:swipeOpenOnLongPress="true"?/>??
  • ??
  • </RelativeLayout>??

  • 接下來是itm.xml的代碼:

    [java]?view plaincopy
  • <FrameLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????xmlns:tools="http://schemas.android.com/tools"??
  • ????android:layout_width="match_parent"??
  • ????android:layout_height="60dp"?>??
  • ??
  • ????<LinearLayout??
  • ????????android:id="@+id/id_back"??
  • ????????android:layout_width="match_parent"??
  • ????????android:layout_height="match_parent"??
  • ????????android:background="#ffcccccc"??
  • ????????android:gravity="center|right"?>??
  • ??
  • ????????<Button??
  • ????????????android:id="@+id/id_remove"??
  • ????????????android:layout_width="60dp"??
  • ????????????android:layout_height="wrap_content"??
  • ????????????android:layout_gravity="center"??
  • ????????????android:layout_marginRight="4dp"??
  • ????????????android:background="@android:color/holo_green_light"??
  • ????????????android:text="Delete"??
  • ????????????android:textColor="#fff"?>??
  • ????????</Button>??
  • ????</LinearLayout>??
  • ??
  • ????<LinearLayout??
  • ????????android:id="@+id/id_front"??
  • ????????android:layout_width="match_parent"??
  • ????????android:layout_height="match_parent"??
  • ????????android:background="#ffffffff"?>??
  • ??
  • ????????<TextView??
  • ????????????android:id="@+id/id_text"??
  • ????????????android:layout_width="wrap_content"??
  • ????????????android:layout_height="wrap_content"??
  • ????????????android:layout_marginLeft="10dp"??
  • ????????????android:gravity="center_vertical"??
  • ????????????android:minHeight="?android:attr/listPreferredItemHeight"??
  • ????????????android:textAppearance="?android:attr/textAppearanceLarge"??
  • ????????????android:textColor="#000"??
  • ????????????android:textSize="25sp"?>??
  • ????????</TextView>??
  • ????</LinearLayout>??
  • ??
  • </FrameLayout>??

  • 這里要強調一下:對應布局的id和swipeListView中的frontView和backView的Id一致。

    接下來是DataAdapter的代碼

    [java]?view plaincopy
  • package?com.example.swiplistview;??
  • ??
  • import?java.util.List;??
  • ??
  • import?android.content.Context;??
  • import?android.view.LayoutInflater;??
  • import?android.view.View;??
  • import?android.view.View.OnClickListener;??
  • import?android.view.ViewGroup;??
  • import?android.widget.BaseAdapter;??
  • import?android.widget.Button;??
  • import?android.widget.TextView;??
  • ??
  • import?com.fortysevendeg.swipelistview.SwipeListView;??
  • ??
  • public?class?DataAdapter?extends?BaseAdapter{??
  • ????private?List<String>?mDatas;????
  • ????private?LayoutInflater?mInflater;????
  • ????private?SwipeListView?mSwipeListView?;????
  • ????
  • ????public?DataAdapter(Context?context,?List<String>?datas?,?SwipeListView?swipeListView)????
  • ????{????
  • ????????this.mDatas?=?datas;????
  • ????????mInflater?=?LayoutInflater.from(context);????
  • ????????mSwipeListView?=?swipeListView;????
  • ????}????
  • ????
  • ????@Override????
  • ????public?int?getCount()????
  • ????{????
  • ????????return?mDatas.size();??
  • ??????????
  • ????}????
  • ????
  • ????@Override????
  • ????public?Object?getItem(int?position)????
  • ????{????
  • ????????return?mDatas.get(position);????
  • ????}????
  • ????
  • ????@Override????
  • ????public?long?getItemId(int?position)????
  • ????{????
  • ????????return?position;????
  • ????}????
  • ????
  • ????@Override????
  • ????public?View?getView(final?int?position,?View?convertView,?ViewGroup?parent)????
  • ????{????
  • ????????convertView?=?mInflater.inflate(R.layout.item,?null);????
  • ????
  • ????????TextView?tv?=?(TextView)?convertView.findViewById(R.id.id_text);????
  • ????????Button?del?=?(Button)?convertView.findViewById(R.id.id_remove);????
  • ????????tv.setText(mDatas.get(position));????
  • ????????del.setOnClickListener(new?OnClickListener()????
  • ????????{????
  • ????????????@Override????
  • ????????????public?void?onClick(View?v)????
  • ????????????{????
  • ????????????????mDatas.remove(position);????
  • ????????????????notifyDataSetChanged();????
  • ?????????????????/**??
  • ??????????????????*?關閉SwipeListView??
  • ??????????????????*?不關閉的話,剛刪除位置的item存在問題?,不能再次點擊?
  • ??????????????????*/????
  • ????????????????mSwipeListView.closeOpenedItems();????
  • ????????????}????
  • ????????});????
  • ????????????
  • ????????return?convertView;????
  • ????}????
  • }??

  • 最后是MainActivity的代碼了,都比較簡單:

    [java]?view plaincopy
  • package?com.example.swiplistview;??
  • ??
  • import?java.util.ArrayList;??
  • import?java.util.List;??
  • ??
  • import?android.app.Activity;??
  • import?android.os.Bundle;??
  • ??
  • import?com.fortysevendeg.swipelistview.BaseSwipeListViewListener;??
  • import?com.fortysevendeg.swipelistview.SwipeListView;??
  • ??
  • public?class?MainActivity?extends?Activity?{??
  • ????SwipeListView?swipeListView;??
  • ????List<String>?mDatas;??
  • ????DataAdapter?adapter;??
  • ??
  • ????@Override??
  • ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  • ????????super.onCreate(savedInstanceState);??
  • ????????setContentView(R.layout.activity_main);??
  • ????????mDatas?=?new?ArrayList<String>();??
  • ????????for?(int?i?=?0;?i?<?20;?i++)?{??
  • ????????????mDatas.add("這是記錄呢。。"?+?i);??
  • ????????}??
  • ??
  • ????????swipeListView?=?(SwipeListView)?findViewById(R.id.example_lv_list);??
  • ????????adapter?=?new?DataAdapter(this,?mDatas,?swipeListView);??
  • ????????swipeListView.setAdapter(adapter);??
  • ??
  • ????????swipeListView.setSwipeListViewListener(new?BaseSwipeListViewListener()?{??
  • ????????????//?這里可以重寫很多方法??
  • ????????????@Override??
  • ????????????public?void?onListChanged()?{??
  • ??
  • ????????????????super.onListChanged();??
  • ??
  • ????????????}??
  • ??
  • ????????????@Override??
  • ????????????public?void?onClickFrontView(int?position)?{??
  • ??????????????????
  • ????????????????super.onClickFrontView(position);??
  • ??????????????????
  • ????????????}??
  • ??
  • ????????});??
  • ????}??
  • }??

  • 這樣就大功告成了。

    上面的都是最基本的功能,完成了上面的那些,然后我們就可以做相應的點擊事件了。所以一起加油吧。

    最后還有一個我在github下載的一個Demo,但并不是47deg的,是一個普通人寫的,我給她上傳了,下載地址http://download.csdn.net/detail/harryweasley/8190525

    這里多說一下,你剛導入Eclipse時,會報一個不能解析android-14,你重啟一下Eclipse,就好了。第二個問題,重啟Eclipse后,bin文件里又有錯誤了,刪除bin文件,Eclipse會重新自動生成一個,這樣兩個小bug就解決了。

    總結

    以上是生活随笔為你收集整理的利用swipelistview完成qq聊天列表右滑删除功能的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。