本例满足一些开发者为了实现像iphonelist选项的滑动删除功能,在android中没有现成的控件可以实现这个功能,所以研究了下在自定义的适配类中为每个项的contentview设置触控监听OnTouchListener实现,具体实现步骤如下。

第一步:设计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" >    <ListView        android:id="@+id/list"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:divider="@null" /></RelativeLayout>

第二步:设计item.xml添加一个TextView和一个Button如下:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:background="@drawable/contact_listitem"    android:orientation="horizontal"    android:gravity="center_vertical"     >       <TextView        android:id="@+id/title"        android:layout_width="wrap_content"        android:layout_height="wrap_content"             android:layout_alignParentLeft="true"          android:gravity="center_vertical"        android:layout_gravity="center_vertical"        android:paddingTop="8dip"        android:paddingLeft="8dip"        android:paddingBottom="8dip"        android:singleLine="true"        android:text="hhhh"        android:layout_margin="8dip"         />         <Button        android:id="@+id/del"        android:layout_width="wrap_content"        android:singleLine="true"        android:layout_height="wrap_content"               android:gravity="center_vertical"        android:layout_gravity="center_vertical"        android:layout_alignParentRight="true"        android:paddingLeft="8dip"        android:paddingRight="8dip"               android:textColor="#ffffff"        android:background="@drawable/btn_style_six_normal"        android:text="删除"        android:layout_margin="8dip"        android:visibility="gone"         /></RelativeLayout>

第三步:创建设配类MyAdapter继承BaseAdapter在本类中主要是对触控滑动显示删除按钮做了比较详细,其他的跟一般的listview设计大同小异,代码如下:

import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.TextView;public class MyAdapter extends BaseAdapter {private List<String> arrays = null;private Context mContext;private Button curDel_btn;private float x,ux;public MyAdapter(Context mContext, List<String> arrays) {this.mContext = mContext;this.arrays = arrays;}public int getCount() {return this.arrays.size();}public Object getItem(int position) {return null;}public long getItemId(int position) {return position;}public View getView(final int position, View view, ViewGroup arg2) {ViewHolder viewHolder = null;if (view == null) {viewHolder = new ViewHolder();view = LayoutInflater.from(mContext).inflate(R.layout.item, null);viewHolder.tvTitle = (TextView) view.findViewById(R.id.title);viewHolder.btnDel = (Button) view.findViewById(R.id.del);view.setTag(viewHolder);} else {viewHolder = (ViewHolder) view.getTag();}//为每一个view项设置触控监听view.setOnTouchListener(new OnTouchListener() {public boolean onTouch(View v, MotionEvent event) {final ViewHolder holder = (ViewHolder) v.getTag();//当按下时处理if (event.getAction() == MotionEvent.ACTION_DOWN) {//设置背景为选中状态v.setBackgroundResource(R.drawable.mm_listitem_pressed);//获取按下时的x轴坐标x = event.getX();//判断之前是否出现了删除按钮如果存在就隐藏if (curDel_btn != null) {curDel_btn.setVisibility(View.GONE);}} else if (event.getAction() == MotionEvent.ACTION_UP) {// 松开处理//设置背景为未选中正常状态v.setBackgroundResource(R.drawable.mm_listitem_simple);//获取松开时的x坐标ux = event.getX();//判断当前项中按钮控件不为空时if (holder.btnDel != null) {//按下和松开绝对值差当大于20时显示删除按钮,否则不显示if (Math.abs(x - ux) > 20) {holder.btnDel.setVisibility(View.VISIBLE);curDel_btn = holder.btnDel;}}} else if (event.getAction() == MotionEvent.ACTION_MOVE) {//当滑动时背景为选中状态v.setBackgroundResource(R.drawable.mm_listitem_pressed);} else {//其他模式//设置背景为未选中正常状态v.setBackgroundResource(R.drawable.mm_listitem_simple);}return true;}});viewHolder.tvTitle.setText(this.arrays.get(position));//为删除按钮添加监听事件,实现点击删除按钮时删除该项viewHolder.btnDel.setOnClickListener(new OnClickListener() {public void onClick(View v) {if(curDel_btn!=null)curDel_btn.setVisibility(View.GONE);arrays.remove(position);notifyDataSetChanged();}});return view;}final static class ViewHolder {TextView tvTitle;Button btnDel;}}

第四步:编写MainActivity这里比较简单,不多说直接贴代码

import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;public class MainActivity extends Activity {private ListView mListView;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mListView = (ListView) this.findViewById(R.id.list);        List<String> list = new ArrayList<String>();        for(int i=0;i<10;i++){        list.add("选项"+i);        }        //实例化自定义内容适配类        MyAdapter adapter = new MyAdapter(this,list);        //为listView设置适配        mListView.setAdapter(adapter);    }    }

第五步:运行效果如图:


更多相关文章

  1. Android官方架构组件介绍之LifeCycle
  2. Android(安卓)组件系列 -- Activity 启动流程(9.0)
  3. Android(安卓)Wifi 的电源管理
  4. AndroidStudio实现按钮按下时状态改变以及选择器属性及基本用法
  5. StatusBar (状态栏)的架构(Android(安卓)2.3)
  6. Android(安卓)Gems — Fragment本质之View管理
  7. .Net 转战 Android(安卓)4.4 日常笔记(4)--按钮事件和国际化
  8. Edittext失去焦点
  9. Android(安卓)ApiDemos示例解析(189):Views->ScrollBars->2.Fanc

随机推荐

  1. 自定义Android(cacerts.bks)添加根证书
  2. 解决Cocos2d-x3.1编译生成Android程序出
  3. Android(安卓)ANR原因分析(基于traces.tx
  4. Android DEX Preopt prebuilt apks
  5. Android:获取屏幕分辨率方法汇总
  6. android之TextVIew与Button交互
  7. Android App怎样调用 Frameworks Bluetoo
  8. 编译librtmp for Android
  9. Android第九讲——网络(六)xUtils
  10. AndroidStudio3.6导入项目出现unable to