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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 继承ListView实现滑动删除功能.

發(fā)布時間:2025/4/16 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 继承ListView实现滑动删除功能. 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在一些用戶體驗較好的應(yīng)用上,可以經(jīng)常遇見 ? 在ListView中 ?向左或向右滑動便可刪除那一項列表.具體實現(xiàn) ?則是繼承ListView實現(xiàn)特定功能即可.(1). 新建 delete_button.xml文件 <?xml?version="1.0"?encoding="utf-8"?> <Button?xmlns:android="http://schemas.android.com/apk/res/android" ????android:layout_width="match_parent" ????android:id="@+id/btn_delete" ????android:layout_height="match_parent" ????android:background="#FF0000" ????android:textColor="#F8F8FF" ????android:text="刪除" ????android:orientation="vertical"?> </Button>??
很簡單的布局,一個按鈕,但這就是滑動時會出現(xiàn)的一個布局.(2). 創(chuàng)建MyListView繼承自 ListView. public?class?MyListView?extends?ListView?implements?OnTouchListener,OnGestureListener?{ ????private?GestureDetector?gestureDetector;???//監(jiān)聽手勢的實例 ???? ????public?interface?OnDeleteListener{???????//將要刪除的某項位置??回調(diào)給?MainActivity進行處理 ????????void?onDelete(int?index?); ????} ????private?OnDeleteListener?mListener;??????//刪除監(jiān)聽 ???? ????private?View?deleteButton;?????//刪除按鈕的視圖 ???? ????private?ViewGroup?itemLayout;???//需要操作項??的?ViewGroup對象 ???? ????private?int?selectedItem;???//選中位置 ???? ????private?boolean?isDeleteShown;???//是否有??刪除按鈕顯示 ????public?MyListView(Context?context,?AttributeSet?attrs)?{ ????????super(context,?attrs); ????????gestureDetector=new?GestureDetector(getContext(),this); ????????setOnTouchListener(this); ????} ????public?void?setOnDeleteListener(OnDeleteListener?l){ ????????this.mListener=l; ????} ???? ????@Override ????public?boolean?onTouch(View?v,?MotionEvent?event)?{ ????????if(isDeleteShown){ ????????????itemLayout.removeView(deleteButton); ????????????deleteButton=null; ????????????isDeleteShown=false; ????????????return?true; ????????} ????????else{ ????????????//如果在空白地方繼續(xù)滑動??,??禁止非法位置出現(xiàn)??刪除按鈕 ????????????if(AdapterView.INVALID_POSITION?==?pointToPosition((int)event.getX(),?(int)?event.getY()))?? ????????????{ ????????????????return?false; ????????????} ????????????selectedItem=pointToPosition((int)event.getX(),?(int)event.getY()); ????????????return?gestureDetector.onTouchEvent(event);?? ????????} ????} ????@Override ????public?boolean?onDown(MotionEvent?e)?{??//點擊按下事件 ????????if(!isDeleteShown){ ????????????selectedItem=pointToPosition((int)e.getX(),?(int)e.getY()); ????????} ????????return?false; ????} ????@Override ????public?boolean?onFling(MotionEvent?e1,?MotionEvent?e2,?float?x,??//手指滑動事件 ????????????float?y)?{ ????????if(!isDeleteShown&&Math.abs(x)>Math.abs(y)){ ????????????deleteButton=LayoutInflater.from(getContext()).inflate(R.layout.delete_button,null); ????????????deleteButton.setOnClickListener(new?OnClickListener()?{ ????????????????@Override ????????????????public?void?onClick(View?v)?{ ????????????????????itemLayout.removeView(deleteButton); ????????????????????deleteButton=null; ????????????????????isDeleteShown=false; ????????????????????mListener.onDelete(selectedItem); ????????????????} ????????????}); ????????????itemLayout=(ViewGroup)?getChildAt(selectedItem?-?getFirstVisiblePosition()); ?????????????RelativeLayout.LayoutParams?params?=?new?RelativeLayout.LayoutParams(?? ????????????????????????LayoutParams.WRAP_CONTENT,?LayoutParams.WRAP_CONTENT);?? ?????????????params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);?? ?????????????params.addRule(RelativeLayout.CENTER_VERTICAL);?? ?????????????itemLayout.addView(deleteButton,?params);?? ?????????????isDeleteShown=true; ????????} ????????return?false; ????} ????@Override ????public?void?onLongPress(MotionEvent?e)?{ ???????? ????} ????@Override ????public?boolean?onScroll(MotionEvent?arg0,?MotionEvent?arg1,?float?arg2, ????????????float?arg3)?{ ????????return?false; ????} ????@Override ????public?void?onShowPress(MotionEvent?arg0)?{ ???????? ????} ????@Override ????public?boolean?onSingleTapUp(MotionEvent?arg0)?{ ????????return?false; ????} ???? }這段代碼, ?在構(gòu)造方法中創(chuàng)建了 GestureDetector的實例用于監(jiān)聽手勢,注冊了touch事件,然后在onTouch進行判斷,如果刪除按鈕已經(jīng)顯示了,將將它移除掉,否則就是用GestureDetector處理當(dāng)前手勢.
當(dāng)手指按下onGestureListener的onDown方法時,這里通過pointToPosition()方法判斷當(dāng)前選中的是哪一行.當(dāng)手指快速滑動時,會調(diào)用onFling()方法,在這里會去加載delete_button.xml這個布局,然后將刪除按鈕添加到當(dāng)前選中的那一行item上。
這里刪除按鈕添加了一個點擊事件,當(dāng)點擊了刪除按鈕時就會回調(diào)onDeleteListener的onDelete()方法,在回調(diào)方法中應(yīng)該去處理具體的刪除操作。

(3)新建item項 <?xml?version="1.0"?encoding="utf-8"?>?? <RelativeLayout?xmlns:android="http://schemas.android.com/apk/res/android"?? ????android:layout_width="match_parent"?? ????android:layout_height="match_parent"?? ????android:descendantFocusability="blocksDescendants"?? ????android:orientation="vertical"?>?? ?? ????<TextView?? ????????android:id="@+id/tv"?? ????????android:layout_width="wrap_content"?? ????????android:layout_height="50dp"?? ????????android:layout_centerVertical="true"?? ????????android:gravity="left|center_vertical"?? ????????android:textColor="#000"?/>?? ?? </RelativeLayout>???
(4) ?適配器 public?class?MyAdapter?extends?ArrayAdapter<String>?{ ????public?MyAdapter(Context?context,?int?tvSourceId,List<String>?objects)?{ ????????super(context,?tvSourceId,objects); ????} ???? ????@Override ????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{ ????????View?view; ????????if(convertView==null){ ????????????view=LayoutInflater.from(getContext()).inflate(R.layout.item,null); ????????} ????????else{ ????????????view=convertView; ????????} ????????TextView?tv=(TextView)?view.findViewById(R.id.tv); ????????tv.setText(getItem(position)); ????????return?view; ????} }?
(5) main.xml <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.example.listviewdeletedemo.MyListView? ????????android:id="@+id/mListView" ????????android:layout_width="match_parent" ????????android:layout_height="match_parent"> ????</com.example.listviewdeletedemo.MyListView> ???? </RelativeLayout>??

(6)最后初始化數(shù)據(jù),處理onDelete方法中的刪除. public?class?MainActivity?extends?Activity?{ ????private?MyListView?mListView; ????private?MyAdapter?mAdapter; ????private?List<String>?contentList=new?ArrayList<String>();??//數(shù)據(jù)集 ???? ????@Override ????protected?void?onCreate(Bundle?savedInstanceState)?{ ????????super.onCreate(savedInstanceState); ????????requestWindowFeature(Window.FEATURE_NO_TITLE); ????????setContentView(R.layout.activity_main); ????????initList(); ????????mListView=(MyListView)?findViewById(R.id.mListView); ????????mListView.setOnDeleteListener(new?OnDeleteListener()?{ ????????????@Override ????????????public?void?onDelete(int?index)?{ ????????????????contentList.remove(index); ????????????????mAdapter.notifyDataSetChanged(); ????????????} ????????}); ????????mAdapter=new?MyAdapter(this,?0,?contentList); ????????mListView.setAdapter(mAdapter); ????} ?????private?void?initList()?{?? ????????????contentList.add("Content?Item?1");?? ????????????contentList.add("Content?Item?2");?? ????????????contentList.add("Content?Item?3");?? ????????????contentList.add("Content?Item?4");?? ????????????contentList.add("Content?Item?5");?? ????????????contentList.add("Content?Item?6");?? ????????????contentList.add("Content?Item?7");?? ????????????contentList.add("Content?Item?8");?? ????????????contentList.add("Content?Item?9");?? ????????????contentList.add("Content?Item?10");?? ????????????contentList.add("Content?Item?11");?? ????????????contentList.add("Content?Item?12");?? ????????????contentList.add("Content?Item?13");?? ????????????contentList.add("Content?Item?14");?? ????????????contentList.add("Content?Item?15");?? ????????????contentList.add("Content?Item?16");?? ????????????contentList.add("Content?Item?17");?? ????????????contentList.add("Content?Item?18");?? ????????????contentList.add("Content?Item?19");?? ????????????contentList.add("Content?Item?20");?? ????????}?? ???? }這樣,一個毫無BUG的滑動刪除就完成了.







來自為知筆記(Wiz)

轉(zhuǎn)載于:https://www.cnblogs.com/aibuli/p/d8bd3842a4ae78af0016af14e5ee0636.html

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的android 继承ListView实现滑动删除功能.的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩国产欧美精品 | 日日综合网 | 久久亚洲AV成人无码一二三 | 国产精品3 | 五月综合色 | 国产精品观看 | 91精品综合久久 | 无人在线观看的免费高清视频 | 午夜成年人| 国产一级二级三级在线 | 美女操出白浆 | 爱吃波客今天最新视频 | 爱爱免费网址 | 国产免费二区 | 日本亲子乱子伦xxxx50路 | 99热日韩| 大肉大捧一进一出好爽视频 | 好男人网站 | 亚洲激情在线 | 五月天丁香社区 | 大桥未久视频在线观看 | 欧美人与野| 午夜寂寞自拍 | 少妇精品无码一区二区三区 | 成人深夜小视频 | 中文字幕日韩无 | 日本高清精品 | 伊人逼逼| av网址免费观看 | 性感av在线 | 日本一区二区三区视频在线播放 | 天堂中文视频 | 国产99久久 | 性淫影院| 国产一级做a爱片久久毛片a | a∨鲁丝一区鲁丝二区鲁丝三区 | 国产成人一区二区三区小说 | 国产性猛交96| 国产毛片久久久久久久 | 快播久久 | 欧美巨乳在线观看 | 日本黄色小网站 | 国产精品精品国产 | 国产人妻人伦精品1国产丝袜 | 在线播放波多野结衣 | 亚洲少妇毛片 | 丰满的人妻hd高清日本 | 国产视频一区三区 | 帮我拍拍漫画全集免费观看 | 中文字幕一本 | 射一射 | 成人午夜免费福利视频 | 黄网站在线播放 | www天天干 | 亚洲二级片 | 羞羞动态图 | 在线播放91灌醉迷j高跟美女 | 国产精品亚洲天堂 | 亚洲最大综合网 | 亚洲熟女乱综合一区二区三区 | 久久久夜夜夜 | 欧美久操| 日本精品一二三区 | 国产精品香蕉国产 | 国产激情精品 | 2020狠狠干 | 日本不卡视频在线播放 | 久久婷婷综合国产 | 亚洲欧美日本国产 | 国产精品毛片久久久久久久 | 中文字幕99 | cao久久| 亚洲国产片 | av在线免费观看网址 | 亚洲性生活 | 性色国产成人久久久精品 | 亚洲精品三级 | 国产亚洲精品久久久久久 | 久久久久国产精品 | 黄色av片三级三级三级免费看 | 啪啪在线视频 | 一区二区三区精品在线观看 | 国产牛牛 | 色综合视频在线 | 涩漫天堂 | 黄色片亚洲 | 日韩欧美精品国产 | 日韩精品第一区 | 最新的黄色网址 | 色欧美视频| 日韩av毛片 | 四虎成人在线 | 午夜青青草 | 99热这里只有精品1 亚洲人交配视频 | 20日本xxxxxxxxx46| 亚洲国产精品尤物yw在线观看 | 男女视频在线免费观看 | 日韩乱码人妻无码中文字幕久久 | 女人张开腿让男人桶爽 |