ArrayList中上移下移list集合中相鄰兩個位置數據

1. 概述

這篇文章主要記錄下自己在開發過程中,需要交換list集合中相鄰兩個位置的數據,需求如下:


圖片.png
效果描述如下:
1.  銀行卡列表為listview,數據為list集合;
2.  需要實現點擊向下箭頭交換當前位置數據和下一個位置數據,點擊向上箭頭交換當前位置數據和上一個位置數據;
3.  需要使用ArrayList中的 remove和add 方法實現 上移下移list集合中相鄰兩個位置的數據;
2. 上移思路如下

1.  根據當前位置 curPosition,從itemList集合中獲取到 curPosition 對應的數據 upFirst;
2.  根據上一個位置 curPosition-1,從itemList集合中獲取到 curPosition-1 對應的數據 upSecond;

3.  從 itemList集合中 移除 當前位置 curPosition;
4.  從 itemList集合中 移除 上一個位置  curPosition-1;

5.  實現上移效果:調用add方法,把 upFirst數據添加到 上一個位置  curPosition-1;
6.  實現上移效果:調用add方法,把 upSecond數據添加到 當前位置   curPosition;

7.  此時上移效果代碼已經寫完,需要把 curPosition-1位置 重新設置為當前位置 currentPosition;
8.  調用adapter的 refresh方法,把 上移后重新設置的當前位置 currentPosition 傳遞給 refresh方法,
    刷新數據即可;
3. 下移思路如下

1.  根據當前位置 curPosition,從itemList集合中獲取到 curPosition 對應的數據 downFirst;
2.  根據下一個位置 curPosition+1,從itemList集合中獲取到 curPosition+1 對應的數據 downSecond;

3.  從 itemList集合中 移除 當前位置 curPosition+1;
4.  從 itemList集合中 移除 下一個位置  curPosition;

5.  實現下移效果:調用add方法,把 downSecond數據添加到 當前位置  curPosition;
6.  實現下移效果:調用add方法,把 downFirst數據添加到 上一個位置   curPosition+1;

7.  此時下移效果代碼已經寫完,需要把 curPosition+1位置 重新設置為當前位置 currentPosition;
8.  調用adapter的 refresh方法,把 下移后重新設置的當前位置 currentPosition 傳遞給 refresh方法,
    刷新數據即可;
3. 上移分析圖

圖片.png
4. 下移分析圖

圖片.png
4. 代碼如下

/**
 * Email: 2185134304@qq.com
 * Created by Novate 2018/8/21 9:42
 * Version 1.0
 * Params:
 * Description:    默認付款方式
*/

public class DefaultPayStyleActivity extends BaseActivity implements ChangeAdapter.Callback {

    private ListView lv;
    private ChangeAdapter adapter;
    private ArrayList<String> itemList;
    private int currentPosition = -1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_default_pay_style);
    }

    @Override
    public void initView() {        
        lv = (ListView) findViewById(R.id.lv_change);
        initDatas() ;
        adapter = new ChangeAdapter(this, itemList, this, currentPosition);
        lv.setAdapter(adapter);
    }

    private void initDatas() {
        itemList = new ArrayList<String>();
        itemList.add("余額寶");
        itemList.add("螞蟻花唄");
        itemList.add("余額");
        itemList.add("工商銀行儲蓄卡(1689)");
        itemList.add("花唄分期");
    }

    /**
     * ChangeAdapter中的3個點擊事件
     * 1. 整個item點擊事件的處理邏輯
     * 2. 向上圖標按鍵點擊事件的處理邏輯
     * 3. 向下圖標按鍵點擊事件的處理邏輯
     */
    @Override
    public void click(View v) {
        int curPosition;
        int mCurPosition;
        switch (v.getId()){
            //整個item點擊事件的處理邏輯
            case R.id.item:
                // 通過getTag(key)方法, 強制類型轉換獲取該item的position,然后調用refresh()方法通知adapter當前position數據更新了,
                // 然后adapter就會根據 currentPosition處理向上向下箭頭的顯示與隱藏
                mCurPosition = (int) v.getTag(R.id.tag_item_click);
                currentPosition = mCurPosition;
                adapter.refresh(currentPosition);
                break;

            //向上圖標按鍵點擊事件的處理邏輯
            case R.id.up:
                // 調用getTag獲取點擊的position,調換當前位置與上一個位置的數據值,就實現了item上移效果,
                // 對于第一個item,不處理上移,然后調用refresh()方法刷新數據即可
                curPosition = (int) v.getTag();
                if (curPosition != 0) {
                    String upFirst = itemList.get(curPosition); // 當前item位置對應數據
                    String upSecond = itemList.get(curPosition - 1); // 上一個位置數據值
                    itemList.remove(curPosition);
                    itemList.remove(curPosition - 1);
                    itemList.add(curPosition - 1, upFirst);
                    itemList.add(curPosition, upSecond);
                    currentPosition = curPosition - 1;
                    adapter.refresh(currentPosition);
                }
                break;

            //向下圖標按鍵點擊事件的處理邏輯
            case R.id.down:
                // 調用getTag獲取點擊的position,調用當前位置與下一個位置的數據值,就實現item下移效果,
                // 對于最后一個item,不處理下移,然后調用refresh()方法刷新數據即可
                curPosition = (int) v.getTag();
                if (curPosition != itemList.size() - 1) {
                    String downFirst = itemList.get(curPosition);
                    String downSecond = itemList.get(curPosition + 1);
                    itemList.remove(curPosition + 1);
                    itemList.remove(curPosition);
                    itemList.add(curPosition, downSecond);
                    itemList.add(curPosition + 1, downFirst);
                    currentPosition = curPosition + 1;
                    adapter.refresh(currentPosition);
                }
                break;
            default:
                break;
        }
    }
}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容