国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android開發(fā)實現(xiàn)可拖動排序的ListView功能【附源碼下載】

2019-10-22 18:22:16
字體:
供稿:網(wǎng)友

本文實例講述了Android開發(fā)實現(xiàn)可拖動排序ListView功能。分享給大家供大家參考,具體如下:

一、上圖

Android,拖動,排序,ListView,源碼下載

二、簡述

1、需要實現(xiàn)的效果是長按右側(cè)可拖動部分布局實現(xiàn)列表項的拖動排序
2、當(dāng)點擊列表項前面的單選按鈕時,在該條目右側(cè)顯示刪除圖標(biāo),點擊該圖標(biāo)刪除當(dāng)前條目。

三、實現(xiàn)思路

借助github上的開源代碼drag-sort-listview-master加以改造。

四、主要源碼展示

1、Activity代碼

package com.gengducun.dslvdemo;import java.util.ArrayList;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;import com.mobeta.android.dslv.DragSortListView;public class MainActivity extends Activity { protected static final String TAG = "MainActivity"; /**產(chǎn)品信息列表**/ private ArrayList<ProductInfoBean> productInfoList; /**產(chǎn)品列表控件**/ private DragSortListView mDslvProductList; /**產(chǎn)品信息列表*/ private ProductListAdapter mProductListAdapter; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  mDslvProductList = (DragSortListView) findViewById(R.id.dslv_product_list);  initProductList();  mProductListAdapter = new ProductListAdapter(productInfoList, this);  mDslvProductList.setAdapter(mProductListAdapter);  mDslvProductList.setDropListener(onDrop);  mDslvProductList.setChoiceMode(ListView.CHOICE_MODE_SINGLE); } private DragSortListView.DropListener onDrop = new DragSortListView.DropListener() {  @Override  public void drop(int from, int to) {   if (from != to) {    ProductInfoBean item = (ProductInfoBean) mProductListAdapter.getItem(from);    mProductListAdapter.remove(item);    mProductListAdapter.insert(item,from, to);    mDslvProductList.moveCheckState(from, to);   }  } }; private void initProductList() {  productInfoList = new ArrayList<ProductInfoBean>();  ProductInfoBean productInfo1 = new ProductInfoBean("EURUSD1");  ProductInfoBean productInfo2 = new ProductInfoBean("EURUSD2");  ProductInfoBean productInfo3 = new ProductInfoBean("EURUSD3");  ProductInfoBean productInfo4 = new ProductInfoBean("EURUSD4");  ProductInfoBean productInfo5 = new ProductInfoBean("EURUSD5");  ProductInfoBean productInfo6 = new ProductInfoBean("EURUSD6");  ProductInfoBean productInfo7 = new ProductInfoBean("EURUSD7");  productInfoList.add(productInfo1);  productInfoList.add(productInfo2);  productInfoList.add(productInfo3);  productInfoList.add(productInfo4);  productInfoList.add(productInfo5);  productInfoList.add(productInfo6);  productInfoList.add(productInfo7); }}

2、Adapter代碼

package com.gengducun.dslvdemo;import java.util.ArrayList;import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RadioButton;import android.widget.TextView;public class ProductListAdapter extends BaseAdapter { private static final String TAG = "ProductListAdapter1"; /**產(chǎn)品信息列表*/ private ArrayList<ProductInfoBean> productInfoList; /**上下文*/ private Context mContext; /**布局加載器*/ private LayoutInflater mInflater; /**布局緩存*/ private ViewHolder mHolder; /**本類適配器對象**/ private ProductListAdapter mProductListAdapter1; /**選中項位置**/ private int mSelectPosition = -1; public ProductListAdapter(ArrayList<ProductInfoBean> productInfoList, Context context) {  super();  this.productInfoList = productInfoList;  this.mContext = context;  this.mInflater = LayoutInflater.from(context);  this.mProductListAdapter1 = this; } @Override public int getCount() {  return null == productInfoList ? 0 : productInfoList.size(); } @Override public Object getItem(int position) {  return productInfoList.get(position); } @Override public long getItemId(int position) {  return position; } public int getmSelectPosition() {  return mSelectPosition; } public void setmSelectPosition(int mSelectPosition) {  this.mSelectPosition = mSelectPosition; } /**  * 刪除產(chǎn)品  * @param productInfoBean  */ public void remove(ProductInfoBean productInfoBean) {  synchronized (this) {   productInfoList.remove(productInfoBean);  }  notifyDataSetChanged(); } /**  * 將產(chǎn)品移動到指定的位置  * @param productInfoBean  * @param from 移動之前的位置  * @param to 移動完成之后,該產(chǎn)品所在的位置  */ public void insert(ProductInfoBean productInfoBean, int from, int to) {  synchronized (this) {   Log.i(TAG, "from=" + from + "  to =" + to);   if (mSelectPosition != -1) {//有選中項的前提下    if ((from < mSelectPosition && to < mSelectPosition) || (from > mSelectPosition && to > mSelectPosition)) {     //在選中項之前的位置進行拖拉或者在選中項之后的區(qū)域拖拉,不會影響選中項    } else if (from < mSelectPosition && to > mSelectPosition) {     //將選中項之前的移動到選中項之后的位置,則選中項的索引需要發(fā)生變化,應(yīng)該是選中項的位置-1     mSelectPosition = mSelectPosition - 1;    } else if (from > mSelectPosition && to < mSelectPosition) {     //將選中項之后的項移動到選中項之前的位置,索引也需要變化,應(yīng)該是選中項的位置+1     mSelectPosition = mSelectPosition + 1;    } else if ((from == mSelectPosition && from > to) || (from == mSelectPosition && from < to)) {     //如果將選中項往選中項前面的方向拖,則選中項的索引也需要變化,應(yīng)該是拖動到的位置     mSelectPosition = to;    } else if ((from < mSelectPosition && to == mSelectPosition)) {     //將選中項之前的移動到當(dāng)前選中項的位置,索引需要變化,選中項的索引應(yīng)該是 選中項的值-1     mSelectPosition = mSelectPosition - 1;    } else if (from > mSelectPosition && to == mSelectPosition) {     //將選中項之后的移動到當(dāng)前項的位置,索引需要變化,選中項的索引應(yīng)該是選中項的值+1     mSelectPosition = mSelectPosition + 1;    }   }   productInfoList.add(to, productInfoBean);  }  notifyDataSetChanged(); } @Override public View getView(int position, View convertView, ViewGroup parent) {  if (null == convertView) {   convertView = mInflater.inflate(R.layout.list_item_product_list_1, null);   mHolder = new ViewHolder();   mHolder.rbSelect = (RadioButton) convertView.findViewById(R.id.rb_select);   mHolder.tvPurductName = (TextView) convertView.findViewById(R.id.tv_product_name);   mHolder.llDragLayout = (LinearLayout) convertView.findViewById(R.id.drag_handle);   mHolder.ivDrag = (ImageView) convertView.findViewById(R.id.iv_drag);   mHolder.ivDeleteProduct = (ImageView) convertView.findViewById(R.id.iv_product_delete);   convertView.setTag(mHolder);  } else {   mHolder = (ViewHolder) convertView.getTag();  }  ProductInfoBean productInfoBean = productInfoList.get(position);  if (null != productInfoBean) {   //設(shè)置單選按鈕的選中狀態(tài)   if (mSelectPosition == position) {    mHolder.rbSelect.setChecked(true);    mHolder.ivDrag.setVisibility(View.GONE);    mHolder.ivDeleteProduct.setVisibility(View.VISIBLE);    mHolder.ivDeleteProduct.setOnClickListener(new RemoveItemClickListener(mSelectPosition));   } else {    mHolder.rbSelect.setChecked(false);    mHolder.ivDrag.setVisibility(View.VISIBLE);    mHolder.ivDeleteProduct.setVisibility(View.GONE);   }   mHolder.rbSelect.setOnClickListener(new ProductClickListener(position));   //設(shè)置產(chǎn)品名稱   if (null != productInfoBean.getProductName() && !("".equals(productInfoBean.getProductName()))) {    mHolder.tvPurductName.setText(productInfoBean.getProductName());   }  }  return convertView; } class ViewHolder {  RadioButton rbSelect;  TextView tvPurductName;  LinearLayout llDragLayout;  ImageView ivDrag;  ImageView ivDeleteProduct; } /**  * 單選按鈕事件監(jiān)聽  * @author Wilson  */ class ProductClickListener implements OnClickListener {  private int position;  public ProductClickListener(int position) {   super();   this.position = position;  }  @Override  public void onClick(View v) {   if (mSelectPosition == position) {    mSelectPosition = -1;   } else {    mSelectPosition = position;   }   Log.i(TAG, "mSelectPosition=" + mSelectPosition + " position=" + position);   mProductListAdapter1.notifyDataSetChanged();  } } /**  * 刪除當(dāng)前產(chǎn)品項監(jiān)聽事件  */ class RemoveItemClickListener implements OnClickListener {  private int position;  public RemoveItemClickListener(int position) {   super();   this.position = position;  }  @Override  public void onClick(View v) {   //1、刪除集合中的數(shù)據(jù)   productInfoList.remove(position);   //2、刪除服務(wù)器端的數(shù)據(jù)   mProductListAdapter1.notifyDataSetChanged();   //   mSelectPosition = -1;  } }}

四、源碼

完整實例代碼點擊此處本站下載。

 

希望本文所述對大家Android程序設(shè)計有所幫助。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 高碑店市| 万源市| 府谷县| 长沙县| 广德县| 辽阳县| 安康市| 平昌县| 赤水市| 阿鲁科尔沁旗| 古田县| 沾化县| 荃湾区| 武陟县| 修水县| 辽阳县| 从化市| 长子县| 临洮县| 宁陵县| 滁州市| 贡觉县| 乌拉特中旗| 临朐县| 名山县| 浠水县| 贵阳市| 中西区| 西城区| 襄城县| 桐庐县| 天门市| 霍林郭勒市| 英德市| 麻城市| 疏附县| 南安市| 宜良县| 延长县| 兴和县| 东港市|