赵雅智_AndroidUI_listview的item滑动删除效果

package com.example.listsildedel;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
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, this,list);
        //为listView设置适配
        mListView.setAdapter(adapter);
    }

    public void openActivity(){
        Intent intent  = new Intent(this, TestActivity.class);
        startActivity(intent);
    }

}

adapter

package com.example.listsildedel;

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;
    private MainActivity mActivity;

    public MyAdapter(MainActivity activity, Context mContext, List<String> arrays) {
        this.mContext = mContext;
        this.arrays = arrays;
        mActivity = activity;

    }

    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();
        }
        //换掉了原来listview中的onItemClick
        <span style="font-size:18px;"><strong>view.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                mActivity.openActivity();
            }
        });</strong></span>

        //为每一个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) {
                        if(curDel_btn.getVisibility() == View.VISIBLE){
                            curDel_btn.setVisibility(View.GONE);
                            return true;
                        }
                    }

                } 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;
                            return true;
                        }
                    }
                } else if (event.getAction() == MotionEvent.ACTION_MOVE) {//当滑动时背景为选中状态
                    return true;
                    //v.setBackgroundResource(R.drawable.mm_listitem_pressed);

                } else {//其他模式
                    //设置背景为未选中正常状态
                    //v.setBackgroundResource(R.drawable.mm_listitem_simple);

                }

                return false;
            }
        });
        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;
    }
}

时间: 2024-10-31 17:13:19

赵雅智_AndroidUI_listview的item滑动删除效果的相关文章

赵雅智_android实例_当监听类有数据更新时下拉刷新

之前两篇文章分别介绍了OnScrollListener的实现和ContentProvider监听数据的变化,下面我们就结合者两个知识点实现一个小项目 项目需求 使用当ContentProvider监听类有数据更新时,在当前界面进行提示,并用OnScrollListener实现下拉刷新 实现效果 通过ContentProvider显示数据在界面 当监听类发生变化时 下拉刷新后显示数据 实现步骤 android_sqlite项目 定义操作标识 匹配结果码 继承ContentProvider类重写方法

赵雅智_使用SQLiteDatabase提供的增删改查方法及事务

知识点详解:http://blog.csdn.net/zhaoyazhi2129/article/details/9026093 MainActivity.java,User.java,BaseDao.java,UserDao.java同上篇 http://blog.csdn.net/zhaoyazhi2129/article/details/28640195 UserDaoImple.java package com.example.android_sqlite.dao.impl; impor

赵雅智:android教学大纲

带下划线为具体内容链接地址,点击后可跳转,希望给大家尽一些微薄之力,目前还在整理中 教学章节 教学内容 学时安排 备注 1 Android快速入门 2 Android模拟器与常见命令 3 Android用户界面设计 4 Android网络通信及开源框架引用 5 线程与消息处理 6 数据存储及访问 7 Android基本单元应用activity 8 Android应用核心Intent 9 资源访问 10 ContentProvider实现数据共享 11 BroadcastReceiver 12 S

赵雅智_通过fragment对布局进行改变

项目需求 设置两个片段,昨天片段对右边进行颜色更改,片段替换的操作 实现效果 点击片段1:改变片段1的颜色值 点击片段2替换片段1 实现步骤 新建主activity并在布局添加两个片段 左片段 对片段1进行颜色值改变的点击事件 获取FragmentManager对象,只要获取FragmentManager对象就能获取fragment对象 根据FragmentManager对象的findFragmentById方法来获取指定的fragment 获取Fragment中的布局文件 获取view中任何控

赵雅智_android系统联系人app分析并获取数据

手机联系人存放位置 和短信一样在data-data下 手机联系人数据库解析 将contacts2.db表导出,通过SQLiteexpert查看 mimetypes表:存放的数据类型(电话,头像,姓名,邮箱) 外键: raw_contacts表:存放联系人的id contact_id:联系人id display_name:联系人姓名 data表:存放联系人的数据 data1:联系人数据 data2:在mimetypes表中data1表示值得意义 mimetype_id:联系人ID,data数据所属

赵雅智_Fragment

当我们需要动态的多界面切换的时候,就需要将UI元素和Activity融合成一个模块.在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个界面动态改变.在4.0或以上系统中就可以使用新的特性来方便的达到这个效果--Fragment类.Fragment类似一个嵌套Activity,可以定义自己的layout和自己的生命周期. 多个Fragment可以放在一个Activity中(所以上面讲到类似一个嵌套Activity),而这个类可以对这些Fragment进行配置以适应不同的屏

赵雅智_android样式与主题

样式与主题的区别 样式应用于特殊的组件,主题应用与整个应用或整个Activity 主题不仅单单显示内容的风格(大小.颜色),而且可以设置窗口的显示风格 当主题的设置属性与样式的设置属相相同时,系统按样式的设置属性显示 系统定义的一些常有主题: <activity android:theme="@android:style/Theme.Dialog"></activity>对话框风格 <activity android:theme="@androi

赵雅智_java多线程下载

简介 线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开起好几个下载通道.当服务器提供下载服务时,使用下载者是共享带宽的,在优先级相同的情况下,总服务器会对总下载线程进行平均分配.不难理解,如果你线程多的话,那下载的越快.现流行的下载软件都支持多线程. 注意:实现多线程的条件是服务器支持单一IP多线程下载,如果不支持的话,很有可能封IP或者是只有一个线程能连接成功,多余线程被屏蔽.部分软件提供"用代理下载"方式,这种方式不会封IP. 原理 通常服务器同时与多个

赵雅智_android多线程下载带进度条

progressBar说明 在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度.一个进度条也可不确定其进度.在不确定模式下,进度条显示循环动画.这种模式常用于应用程序使用任务的长度是未知的. XML重要属性 android:progressBarStyle:默认进度条样式 android:progressBarStyleHorizontal:水平样式 progressBar重要方法 getMax():返回这个进度条的范围的