热门标签 | 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滑动功能》

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


推荐阅读
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • 本文探讨了如何有效地构建和优化微信公众平台账号,涵盖了用户信息管理、内容创作与发布、互动策略及数据分析等方面。通过合理设置用户信息字段,如用户名、昵称、密码、真实姓名和性别等,确保账号的安全性和用户体验。同时,文章还介绍了如何利用微信公众平台的各项功能,提升用户参与度和品牌影响力。 ... [详细]
  • 掌握这些技巧,轻松获取超过90%的资源信息
    在数字时代,高效获取所需资源是每个人必备的技能。本文将分享一系列实用技巧,帮助读者轻松获取超过90%的网络资源信息,无论是学术资料、技术文档还是最新资讯,都能迅速找到。通过优化搜索引擎使用、利用专业数据库和社群资源等方法,读者将能够在信息海洋中游刃有余。 ... [详细]
  • 如何在安卓设备上恢复已删除的微信聊天记录?详细教程与技巧分享
    在安卓设备上恢复已删除的微信聊天记录是一项常见需求,但许多用户对此并不熟悉。本文将详细介绍具体的恢复步骤和技巧,帮助用户轻松找回丢失的聊天记录。通过专业的数据恢复工具和方法,您可以高效地完成这一过程,确保重要信息不丢失。 ... [详细]
  • 2020年高薪专业排行榜揭晓:计算机科学之外还有哪些值得关注的选择?
    近日,《2020年中国大学生就业报告》正式发布,揭示了除计算机科学外,多个高薪专业值得关注。报告指出,金融工程、电子信息工程、软件工程等领域的毕业生薪资水平同样表现优异,这些专业的就业前景和发展潜力不容忽视。此外,随着新兴行业的崛起,如大数据分析、人工智能和生物技术,相关专业的人才需求也在持续增长,为学生提供了更多优质的职业选择。 ... [详细]
  • 本文详细解析了微信服务端示例类的功能与应用。其中,`ClientResponseHandler` 类主要用于处理微信支付所需的响应数据,而 `TenpayHttpClient` 则是对 HTTP 请求(包括 GET 和 POST 方法)进行了封装,以便在内部调用时更加便捷和高效。这些工具类在实际开发中起到了关键作用,开发者无需深入了解其底层实现细节,即可轻松集成微信支付功能。 ... [详细]
  • 经过短暂的休整,我们再次推出新的小程序功能,进一步提升用户体验。现在,小程序页面不仅支持放置转发按钮,还新增了长按快速转发的功能,让用户能够更加便捷地分享页面内容。这一更新将为开发者提供更多创意空间,同时也大幅提升了用户的互动性和使用便利性。 ... [详细]
  • 如何高效导出微信支付交易记录
    要高效导出微信支付交易记录,首先需打开微信应用,进入个人主页后选择“支付”功能。随后,点击“钱包”图标,在钱包页面中找到并点击“账单”选项,即可轻松导出详细的支付记录。此外,用户还可以通过设置筛选条件,如时间范围和交易类型,进一步优化导出的数据,确保信息的准确性和完整性。 ... [详细]
  • HTML 页面中调用 JavaScript 函数生成随机数值并自动展示
    在HTML页面中,通过调用JavaScript函数生成随机数值,并将其自动展示在页面上。具体实现包括构建HTML页面结构,定义JavaScript函数以生成随机数,以及在页面加载时自动调用该函数并将结果呈现给用户。 ... [详细]
  • 优化后的标题:利用 jQuery 实现高效树形结构元素选择与操作
    在Web前端开发中,DOM结构本质上是一种树形结构。通过优化后的jQuery选择器,可以高效地选择和操作DOM树中的节点。这些选择器不仅简化了代码编写,还提高了性能和可维护性。本文将详细介绍如何利用jQuery的树形选择器实现高效的元素选择与操作。 ... [详细]
  • 开源实习机会 | Compiler SIG 正式发布实习任务,诚邀您加入申请!
    对编译技术充满兴趣却苦于无从入手?当前疫情形势下,外出实习变得困难重重?现在,Compiler SIG 正式发布了一系列实习任务,为有志之士提供了宝贵的机会。无论你是初学者还是有一定基础的学生,都能在这里找到适合自己的实践项目。我们诚挚邀请您的加入,共同探索编译技术的无限可能! ... [详细]
  • Java 点餐系统源代码附带管理后台(免费提供)
    本项目提供了一套基于 Java 的点餐系统,包括前端小程序和后端管理平台。采用 Spring Boot 和 SSM 框架,结合 MySQL 和 Redis 数据库技术,适用于学习和二次开发。有需要源代码的开发者可以通过私信联系,免费获取下载链接。 ... [详细]
  • TensorFlow Lite在移动设备上的部署实践与优化笔记
    近期在探索如何将服务器端的模型迁移到移动设备上,并记录了一些关键问题和解决方案。本文假设读者具备以下基础知识:了解TensorFlow的计算图(Graph)、图定义(GraphDef)和元图定义(MetaGraphDef)。此外,文中还详细介绍了模型转换、性能优化和资源管理等方面的实践经验,为开发者提供有价值的参考。 ... [详细]
  • 移动搜索格局已定,切勿误解微信搜索的真正实力
    近期,微信新版本的内测界面曝光,新增了朋友圈搜索和附近商户搜索功能。种种迹象显示,微信正不断强化其搜索能力。尽管移动搜索市场格局已基本稳定,但不应低估微信搜索的潜力。微信不仅在聊天工具、移动浏览器和新闻阅读等领域持续发力,还在通过搜索功能进一步巩固其在移动互联网领域的地位。 ... [详细]
  • 大家好,全新的技术专栏《从零开始掌握容器云网络实战》正式上线。该专栏将系统地介绍容器云网络的基础知识、核心技术和实际应用案例,帮助读者全面理解和掌握容器云网络的关键技术与实践方法。 ... [详细]
author-avatar
mobiledu2502920277
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有