热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android仿微信滑动弹出编辑、删除菜单效果、增加下拉刷新功能

这篇文章主要介绍了Android仿微信滑动弹出编辑、删除菜单效果、增加下拉刷新功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

如何为不同的list item呈现不同的菜单,本文实例就为大家介绍了Android仿微信或QQ滑动弹出编辑、删除菜单效果、增加下拉刷新等功能的实现,分享给大家供大家参考,具体内容如下

效果图:

1. 下载开源项目,并将其中的liberary导入到自己的项目中:

2. 使用SwipeMenuListView代替ListView,在页面中布局:

 
 
  
 
 

注: SwipeRefreshLayout主要是为了给该列表增加下拉刷新功能!

3. 为该ListView创建适配器,与正常的实现并无二致:

public class MusicAdapter extends BaseAdapter { 
 
 private List mDatas; 
 
 private Context mContext; 
 
 public MusicAdapter(List mDatas, Context mContext) { 
 this.mDatas = mDatas; 
 this.mCOntext= mContext; 
 } 
 
 @Override 
 public int getCount() { 
 return mDatas.size(); 
 } 
 
 @Override 
 public Music getItem(int position) { 
 return mDatas.get(position); 
 } 
 
 @Override 
 public long getItemId(int position) { 
 return position; 
 } 
 
 @Override 
 public View getView(int position, View convertView, ViewGroup parent) { 
 if (cOnvertView== null) { 
 cOnvertView= View.inflate(mContext, R.layout.list_item_music, null); 
 new ViewHolder(convertView); 
 } 
 
 ViewHolder holder = (ViewHolder) convertView.getTag(); 
 
 Music music = mDatas.get(position); 
 
 holder.textTitle.setText(music.title); 
 holder.textDesc.setText(music.desc); 
 
 return convertView; 
 } 
 
 class ViewHolder { 
 TextView textTitle; 
 TextView textDesc; 
 
 public ViewHolder(View view) { 
 textTitle = (TextView) view.findViewById(R.id.textTitle); 
 textDesc = (TextView) view.findViewById(R.id.textDesc); 
 view.setTag(this); 
 } 
 } 
} 

4. 为SwipeMenuListView实现Adapter,并在之后,创建滑动菜单:

public class MainActivity extends AppCompatActivity { 
 
 @ViewInject(R.id.listViewMusic) 
 private SwipeMenuListView listViewMusic; 
 
 @ViewInject(R.id.swipeRefreshMusic) 
 private SwipeRefreshLayout swipeRefreshMusic; 
 
 private List musics; 
 
 private MusicAdapter musicAdapter; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 
 x.view().inject(this); 
 musics = new ArrayList<>(); 
 
 for (int i = 0; i <4; i++) { 
 
 Music music = new Music(); 
 music.title = "上邪 : " + i; 
 music.desc = "我欲与君相知,长命无绝衰"; 
 musics.add(music); 
 } 
 
 musicAdapter = new MusicAdapter(musics, this); 
 listViewMusic.setAdapter(musicAdapter); 
 
 SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() { 
 @Override 
 public void create(SwipeMenu menu) { 
 // create "edit" item 
 SwipeMenuItem editItem = new SwipeMenuItem( 
 getApplicationContext()); 
 // set item background 
 editItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9, 
 0xCE))); 
 // set item width 
 editItem.setWidth(dp2px(90)); 
 // set item title 
 editItem.setTitle("编辑"); 
 // set item title fontsize 
 editItem.setTitleSize(18); 
 // set item title font color 
 editItem.setTitleColor(Color.WHITE); 
 // add to menu 
 menu.addMenuItem(editItem); 
 
 // create "edit" item 
 SwipeMenuItem deleteItem = new SwipeMenuItem( 
 getApplicationContext()); 
 // set item background 
 deleteItem.setBackground(new ColorDrawable(Color.parseColor("#ff0000"))); 
 // set item width 
 deleteItem.setWidth(dp2px(90)); 
 // set item title 
 deleteItem.setTitle("删除"); 
 // set item title fontsize 
 deleteItem.setTitleSize(18); 
 // set item title font color 
 deleteItem.setTitleColor(Color.WHITE); 
 // add to menu 
 menu.addMenuItem(deleteItem); 
 } 
 }; 
 
 listViewMusic.setMenuCreator(swipeMenuCreator); 
 
 listViewMusic.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() { 
 @Override 
 public boolean onMenuItemClick(int position, SwipeMenu menu, int index) { 
 switch (index) {// index即是操作menu添加的顺序 
 case 0: 
 Toast.makeText(MainActivity.this, "编辑 : " + position, Toast.LENGTH_SHORT).show(); 
 break; 
 case 1: 
 Toast.makeText(MainActivity.this, "删除 : " + position, Toast.LENGTH_SHORT).show(); 
 musics.remove(position); 
 musicAdapter.notifyDataSetChanged(); 
 break; 
 } 
 
 return false; 
 } 
 }); 
 
 swipeRefreshMusic.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
 @Override 
 public void onRefresh() { 
 
 swipeRefreshMusic.setRefreshing(true); 
 new Handler().postDelayed(new Runnable() { 
 @Override 
 public void run() { 
 
 for (int i = 0; i <4; i++) { 
 
 Music music = new Music(); 
 music.title = "无缘 : " + i; 
 music.desc = "风雨千山玉独行,天下倾心叹无缘"; 
 musics.add(music); 
 } 
 musicAdapter.notifyDataSetChanged(); 
 
 swipeRefreshMusic.setRefreshing(false); 
 } 
 }, 2000); 
 
 } 
 }); 
 } 
 
 private int dp2px(int dp) { 
 return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, 
 getResources().getDisplayMetrics()); 
 } 
} 

注:

1. SwipeMenuCreator是为了给该listitem创建菜单使用,需要实现该的接口中的create方法,在该方法中,可以自由创建菜单项,比如删除、编辑,可以设置菜单的背景颜色,字体颜色大小等;
 2. 在创建SwipeMenuCreator实例后,需为列表设置菜单:listViewMusic.setMenuCreator(swipeMenuCreator);
 3. 通过设置SwipeMenuListView的setOnMenuItemClickListener方法,监听菜单的点击事件,通过onMenuItemClick(int position, SwipeMenu menu, int index)方法,对菜单事件进行处理;
 4. 通过设置SwipeMenuListView的setOnRefreshListener方法,为菜单添加下拉刷新功能!

本文已被整理到了《Android微信开发教程汇总》,欢迎大家学习阅读。

如此这般,便可完美的实现的list item滑动编辑删除功能啦,希望大家喜欢。

更多关于滑动功能的文章,请点击专题: 《Android滑动功能》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文讨论了同事工资打听的话题,包括同工不同酬现象、打探工资的途径、为什么打听别人的工资、职业的本质、商业价值与工资的关系,以及如何面对同事工资比自己高的情况和凸显自己的商业价值。故事中的阿巧发现同事的工资比自己高后感到不满,通过与老公、闺蜜交流和搜索相关关键词来寻求解决办法。 ... [详细]
  • windows便签快捷键_用了windows十几年,没想到竟然这么好用!隐藏的功能你知道吗?
    本文介绍了使用windows操作系统时的一些隐藏功能,包括便签快捷键、截图功能等。同时探讨了windows和macOS操作系统之间的优劣比较,以及人们对于这两个系统的不同看法。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
  • 本文讨论了如何在微信支付宝两套小程序中生成一张二维码,实现支付宝扫码进入支付宝小程序和微信扫码进入微信小程序的对应桌号进行点餐的功能,提供了一些实现方案供参考。 ... [详细]
  • jmeter实践:从csv中获取带引号的数据详情的技巧和运行全部数据的方法
    本文分享了jmeter实践中从csv中获取带引号的数据的解决办法,包括设置CSV Data Set Config和运行脚本获取数据的方法。另外还介绍了循环运行csv中全部数据的解决方法,避免每次修改csv用例都需要修改脚本的麻烦。通过了解和掌握工具的细节点,可以更好地解决问题和提高技术水平。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 仙贝旅行是日本最大的旅游服务平台之一,为广大用户提供优质的日本定制游服务。随着用户数量的增长,仙贝旅行决定与智齿科技合作,全面替换原有客服系统,打造全新的在线客服体系。该体系具备多渠道快速接入的能力,让仙贝旅行轻松与各个渠道的接入用户完成沟通。同时,机器人与人工协同发力,提升客户服务水平。 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
author-avatar
墨镜小靖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有