Android ListView左滑刪除、左滑自定義功能


最近項目需要ListView左滑刪除功能,搜集了很多資料發現了一個某一前輩寫的庫能很簡單的實現這個功能,而且有源碼,直接拿來使用了。

庫名字叫做SwipeMenuListView,下面給大家演示一下使用方法,不用謝。

首先在項目中加入庫,這個不再介紹了。

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="#E3E6ED">

    <com.baoyz.swipemenulistview.SwipeMenuListView
        android:id="@+id/collector_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:divider="#00000000"
         android:dividerHeight="1dp"
         android:fadingEdge="none"
         android:fastScrollEnabled="false"
         android:smoothScrollbar="true">
    </com.baoyz.swipemenulistview.SwipeMenuListView>
    
    <TextView 
        android:id="@+id/collector_listview_empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="@string/listisempty"
        android:textColor="@color/black"
        android:textAppearance="?android:attr/textAppearanceLarge">
    </TextView>

</LinearLayout>

 

數據適配器:

/*
 * 采集器列表數據適配器
 * @author guopeng
 * @created 2015年12月4日
 */
public class CollectorListAdapter extends BaseAdapter   {

    private List<SystemDevice> listItems;//數據集合
    private LayoutInflater layoutinflater;//視圖容器,用來導入布局
    
    static class ViewHolder
    {
        private TextView serialNumber;
        private TextView articleNumber;
        private ImageView image;
    }
    
    /*
     * 實例化Adapter
     */
    public CollectorListAdapter(Context context, List<SystemDevice> dataSet)
    {
        this.listItems = dataSet;
        this.layoutinflater = LayoutInflater.from(context);
    }
    
    @Override
    public int getCount() {
        return listItems.size();
    }

    @Override
    public Object getItem(int position) {
        return listItems.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        SystemDevice device = listItems.get(position);
        ViewHolder holder;
        View view;
        if(convertView == null)
        {
            holder= new ViewHolder();
            //獲取listitem布局文件
            view = layoutinflater.inflate(R.layout.collectorlist_listitem, null);
            
            //獲取控件對象
            holder.serialNumber = (TextView) view.findViewById(R.id.collectorlist_serialnumber);
            holder.articleNumber = (TextView) view.findViewById(R.id.collectorlist_articlelnumber);
            holder.image = (ImageView) view.findViewById(R.id.collectorlist_image);
            
            view.setTag(holder);
        }
        else
        {
            view = convertView;
            holder = (ViewHolder) view.getTag();
        }
        
        //設置圖片和文字
        holder.serialNumber.setText(String.valueOf(device.getSerialNumber()));
        holder.articleNumber.setText(String.valueOf(device.getArticleNumber()));
        
        return view;
    }

}

實現代碼:

    private SwipeMenuListView listView;

//初始化ListView數據,在OnCreate方法中調用
private void initData() { final List<SystemDevice> data = new SystemDeviceDao(context).queryAllSystemDevice(); final CollectorListAdapter adapter = new CollectorListAdapter(context, data); listView.setAdapter(adapter); listView.setEmptyView(activity.findViewById(R.id.collector_listview_empty)); // step 1. create a MenuCreator SwipeMenuCreator creator = new SwipeMenuCreator() { @Override public void create(SwipeMenu menu) { // create "open" item SwipeMenuItem openItem = new SwipeMenuItem(activity.getApplicationContext()); // set item background openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9, 0xCE))); // set item width openItem.setWidth(dp2px(90)); // set item title openItem.setTitle("打開"); // set item title fontsize openItem.setTitleSize(18); // set item title font color openItem.setTitleColor(Color.WHITE); // add to menu menu.addMenuItem(openItem); // create "delete" item SwipeMenuItem deleteItem = new SwipeMenuItem(activity.getApplicationContext()); // set item background deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9, 0x3F, 0x25))); // set item width deleteItem.setWidth(dp2px(90)); // set a icon deleteItem.setIcon(R.drawable.ic_delete); // add to menu menu.addMenuItem(deleteItem); } }; // set creator listView.setMenuCreator(creator); // step 2. listener item click event listView.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public void onMenuItemClick(int position, SwipeMenu menu, int index) { SystemDevice device = data.get(position); switch (index) { case 0: // open open(device); break; case 1: // delete delete(device); data.remove(position); adapter.notifyDataSetChanged(); break; } } }); // set SwipeListener listView.setOnSwipeListener(new OnSwipeListener() { @Override public void onSwipeStart(int position) { // swipe start } @Override public void onSwipeEnd(int position) { // swipe end } }); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { SystemDevice device = data.get(position); open(device); } }); } private int dp2px(int dp) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics()); } /** * 打開 * @param item */ private void open(SystemDevice item) { } /** * 刪除 * @param item */ private void delete(SystemDevice item) { }

效果:

 

 

 

可以自定義左滑功能,大家自己開發。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM