可删除项的ListView实现(仿华为手机短信)
来源:互联网 发布:阿里云学生服务器 翻墙 编辑:程序博客网 时间:2024/05/26 20:22
效果如图:
首先,先定义好相关功能接口:
public interface DelteableInterface { void choose(int position);//设置当前Item为选中状态/<span style="font-family: Arial, Helvetica, sans-serif;">未选中状态</span> void delete();// 把选中状态的项删除}
页面的布局文件:2个删除按钮,1个点击后进行选择,另1个点击后进行删除(参照华为荣耀6);1个ListView。如下:
<RelativeLayout android:id="@+id/rl_choose" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:id="@+id/btn_del" android:layout_alignParentTop="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="delete" android:textColor="@android:color/black"/> <Button android:visibility="gone" android:id="@+id/btn_del_conf" android:layout_alignParentTop="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="delete" android:textColor="@android:color/holo_red_light"/> </RelativeLayout> <ListView android:id="@+id/listview" android:layout_below="@+id/rl_choose" android:layout_width="match_parent" android:layout_height="match_parent"></ListView>
定义ListView每个Item的数据实体,参照短信的内容,一般有:1个头像(ImageView),1个号码或备注(TextView),1个首条信息(TextView)。
实体定义:
public class Bean { public static int i = 0; public String username; public String message; //记录是否选中要删除 public boolean choosed = false; public Bean(){ i++; username = "这是一个用户名"+i; message = "信息HelloWord"+i; }}对应的Item布局定义:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/rl_choose" android:layout_centerVertical="true" android:layout_marginLeft="5dp" android:layout_width="15dp" android:layout_height="15dp"> <ImageView android:visibility="gone" android:layout_centerInParent="true" android:id="@+id/iv_choose" android:src="@drawable/ic_checkbox_nor" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> <ImageView android:id="@+id/iv_icon" android:src="@drawable/ic" android:layout_toRightOf="@+id/rl_choose" android:layout_alignParentLeft="true" android:layout_marginLeft="20dp" android:layout_width="55dp" android:layout_height="55dp" /> <TextView android:id="@+id/tv_name" android:layout_alignTop="@+id/iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:textSize="15dp" android:layout_toRightOf="@+id/iv_icon" android:layout_marginTop="5dp"/> <TextView android:id="@+id/tv_msg" android:layout_alignBottom="@+id/iv_icon" android:layout_below="@+id/tv_name" android:layout_toRightOf="@+id/iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:textSize="15dp" android:layout_marginBottom="5dp"/></RelativeLayout>
定义一个基础的Adapter。和其它所有普通的Adapter一样:
public class DeleteableAdapter extends BaseAdapter{ private List<Bean> datas = new ArrayList<>(); private Context mContext; public DeleteableAdapter(Context context){ mContext = context; for(int i=0; i<30; i++){ datas.add(new Bean()); } } @Override public int getCount(){ return datas.size(); } @Override public Bean getItem(int position){ return datas.get(position%datas.size()); } @Override public long getItemId(int piosition){ return 0; } @Override public View getView(int position, View view, ViewGroup parent){ ViewHolder viewHolder = null; if(view == null){ view = LayoutInflater.from(mContext).inflate(R.layout.layout_list_item, parent, false); viewHolder = new ViewHolder(); viewHolder.ivChoose = (ImageView) view.findViewById(R.id.iv_choose); viewHolder.ivIcon = (ImageView) view.findViewById(R.id.iv_icon); viewHolder.tvMsg = (TextView) view.findViewById(R.id.tv_msg); viewHolder.tvName = (TextView) view.findViewById(R.id.tv_name); view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } final Bean bean = getItem(position); setViewholder(viewHolder, bean); return view; } private void setViewholder(ViewHolder viewholder, Bean bean){ viewholder.tvMsg.setText(bean.message); viewholder.tvName.setText(bean.username); if(canChoose){ viewholder.ivChoose.setVisibility(View.VISIBLE); } else { viewholder.ivChoose.setVisibility(View.GONE); } if(bean.choosed){ viewholder.ivChoose.setImageResource(R.drawable.ic_checkbox_pressed); } else { viewholder.ivChoose.setImageResource(R.drawable.ic_checkbox_nor); } } class ViewHolder{ public ImageView ivChoose; public ImageView ivIcon; public TextView tvName; public TextView tvMsg; } }至此,一个最普通的ListView完成了。如下:
接下来,实现刚才定义的删除功能相关的接口。
public class DeleteableAdapter extends BaseAdapter implements DelteableInterface
@Override public void choose(int position){ Bean bean = getItem(position); bean.choosed = !bean.choosed; notifyDataSetChanged(); } @Override public void delete(){ Iterator<Bean> iterator = datas.iterator(); while (iterator.hasNext()){ Bean bean = iterator.next(); if(bean.choosed){ iterator.remove(); } } notifyDataSetChanged(); } private boolean canChoose = false; public void setCanChoose(Boolean canChoose){ this.canChoose = canChoose; notifyDataSetChanged(); }
在主界面中设置相应的点击事件:
findViewById(R.id.btn_del).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { adapter.setCanChoose(true); findViewById(R.id.btn_del).setVisibility(View.GONE); findViewById(R.id.btn_del_conf).setVisibility(View.VISIBLE); } }); findViewById(R.id.btn_del_conf).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { adapter.delete(); adapter.setCanChoose(false); findViewById(R.id.btn_del).setVisibility(View.VISIBLE); findViewById(R.id.btn_del_conf).setVisibility(View.GONE); } }); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { adapter.choose(position); } });然后就可以像手机短信一样实现删除了。代码没有复杂逻辑,下载地址:http://download.csdn.net/detail/u014137988/9586635
0 0
- 可删除项的ListView实现(仿华为手机短信)
- Android仿QQ实现ListView滑动删除
- Android仿QQ实现ListView滑动删除
- ListView滑动删除实现之三——创建可滑动删除的ListView
- 仿qq的listView 滑动删除
- 仿QQ侧滑删除的ListView
- Android仿QQ和iOS的ListView左滑出现删除和置顶等操作,可自定义菜单
- 安卓listView实现下拉刷新上拉加载滑动仿QQ的删除功能
- 可拖动和删除动画的ListView
- 手机短信技术的实现
- 删除的手机短信怎么恢复
- listview简单实现侧滑删除仿QQ
- 带有上拉加载下拉刷新和可滑动删除功能的ListView的简单实现
- listview获取edittext中输入的数据,显示,并且实现可删除功能
- 仿QQ的ListView:SpinnedHeaderExpandableListView实现
- android滑动删除的listview,仿手机QQ的样子
- ANDROID 动态添加的listView,仿QQ滑动删除
- 仿QQ列表侧滑删除的ListView
- 索引的使用跟查询的and的前后顺序没有关系
- 水晶报表 设计
- Android游戏——贪吃蛇开发实录(改进后的源码和详解)
- Android定制及替换launcher
- 数据结构——实现key为int类型的AVL树
- 可删除项的ListView实现(仿华为手机短信)
- Oracle的同义词(synonyms)详解
- Keepalived-1.2.9集群的安装及配置
- rails中的模型关联(进阶篇)
- java 多线程 操作 CountDownLatch、Semaphore和CyclicBarrier
- jq东西
- 理解javascript中的MVVM开发模式
- 开启JBoss7的access_log功能
- 。。。