可删除项的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
原创粉丝点击