Android最简单的滑动删除

来源:互联网 发布:论坛营销软件 编辑:程序博客网 时间:2024/06/10 11:09

之前由于项目需要,要写一个像QQ一样的滑动删除,自己想了一下发现Android自带控件HorizontalScrollView,就可以实现,应该是最简单的方法了。话不多说,直接上代码:

<?xml version="1.0" encoding="utf-8"?>
<!-- listview的每一项 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:orientation="horizontal">

    <HorizontalScrollView
        android:id="@+id/hr_ill_adp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none"
        android:fillViewport="true">
        
    <RelativeLayout
        android:id="@+id/rl_1_item_ill_adp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffffff" >

        <RelativeLayout
            android:id="@+id/rl_2_item_ill_adp"
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_centerHorizontal="true">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:layout_marginLeft="42dp"
                android:text="显示的字" />
            
        </RelativeLayout>
        

        <RelativeLayout
            android:layout_width="80dp"
            android:layout_height="80dp"
             android:id="@+id/rl_3_item_ill_adp"
            android:layout_alignParentRight="true">
            
            <TextView
            android:id="@+id/tv_delete_ill_adapter"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#FF0000"
            android:gravity="center"
            android:text="删除" />
        </RelativeLayout>
        
    </RelativeLayout>
</HorizontalScrollView>
</LinearLayout>


这是listview的布局文件,一个HorizontalScrollView中,两个RelativeLayout,左边放文字,右边放删除按钮。

如何实现,删除按钮的划出呢,那就要使其刚开始在右边的界面外,来看Adapter代码如何设置的。


package com.example.myslidingdelete;

import java.util.List;


import android.content.Context;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.FrameLayout.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;


public class AdapterDelete extends BaseAdapter
{
    private List<String> list;
    private Context context;
    private int w;
    private Handler handler;

    public AdapterDelete(List<String> list , Context context,Handler handler){
        this.list = list;
        this.context = context;
        this.handler = handler;
        this.w = (int)(80 * context.getResources().getDisplayMetrics().density);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int location) {
        return list.get(location);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;
        if(convertView == null){
            Log.i("", list.get(position)+"----"+position);
            
            holder = new ViewHolder();
            //加载布局
            convertView = View.inflate(context, R.layout.item, null);
            //找控件
            holder.text = (TextView) convertView.findViewById(R.id.textView1);
            holder.sc_r0 = (RelativeLayout) convertView.findViewById(R.id.rl_1_item_ill_adp);
            holder.sc_r1 = (RelativeLayout) convertView.findViewById(R.id.rl_2_item_ill_adp);
            holder.sc_r2 = (RelativeLayout) convertView.findViewById(R.id.rl_3_item_ill_adp);
            
            LayoutParams l = new android.widget.FrameLayout.LayoutParams(MainActivity.SCREENWIDTH + w, w);
            holder.sc_r0.setLayoutParams(l);
            
            android.widget.RelativeLayout.LayoutParams l1 = new android.widget.RelativeLayout.LayoutParams(MainActivity.SCREENWIDTH, w);
            holder.sc_r1.setLayoutParams(l1);
            
            android.widget.RelativeLayout.LayoutParams l2 = new android.widget.RelativeLayout.LayoutParams(w, w);
            l2.leftMargin = MainActivity.SCREENWIDTH;
            holder.sc_r2.setLayoutParams(l2);
            
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }
        
        //赋值
        holder.text.setText(list.get(position));
        
        //删除
        holder.sc_r2.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                handler.sendEmptyMessage(position);
            }
        });
        
        return convertView;
    }

    private class ViewHolder{
        private TextView text ;
        private RelativeLayout sc_r0,sc_r1,sc_r2;
    }
    
}


LayoutParams l = new android.widget.FrameLayout.LayoutParams(MainActivity.SCREENWIDTH + w, w);
            holder.sc_r0.setLayoutParams(l);
            
            android.widget.RelativeLayout.LayoutParams l1 = new android.widget.RelativeLayout.LayoutParams(MainActivity.SCREENWIDTH, w);
            holder.sc_r1.setLayoutParams(l1);
            
            android.widget.RelativeLayout.LayoutParams l2 = new android.widget.RelativeLayout.LayoutParams(w, w);
            l2.leftMargin = MainActivity.SCREENWIDTH;
            holder.sc_r2.setLayoutParams(l2);

第一个LayoutParams是HorizontalScrollView内最外层的RelativeLayout的布局,其宽度设置为:屏幕宽度+删除的按钮宽度,

第二个LayoutParams是文字外面的RelativeLayout的布局,其宽度设置为:屏幕宽度,

第三个LayoutParams是删除按钮外面的RelativeLayout的布局,其宽度设置为:删除按钮宽度,且距离左边距离为:屏幕宽度,这样初始化的时候就看不见删除按钮,滑动时就能看见。从而实现滑动删除。


好了,主要代码都在上面了,其中有些小问题,不影响使用,自己稍加修改即可。

如果要下载完整demo,请点击下面链接:

http://download.csdn.net/detail/u013790519/8526079


0 0
原创粉丝点击