一、需求
需求很明确,我需要滑动排序二级list的数据。
可伸缩和折叠使用的是BaseExpandableListAdapter,用法大家可自行百度查看。这里我主要讲解下,我是如何实现在二级菜单中实现滑动排序的,以及在开发过程中遇到的问题,以及我自己的解决办法,希望给读者一些启示。
二、过程
解决list的滑动排序问题,我能想到的解决办法,有三种,
- 通过RecyclerView + ItemTouchHelper;
- 通过OnDragListener,这种方式需要自己写自定义的ViewGroup;
- 通过ViewDragHelper。
由于项目原因,时间比较急,所以我选择的是第一种方式。
一开始,我的写法如下:
@Override
public View getChildView(int i, int i1, boolean b, View convertView, ViewGroup viewGroup) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.device_action_list_item_child_copy, null);
}
RecyclerView rv = convertView.findViewById(R.id.recycler_view);
rv.setLayoutManager(new LinearLayoutManager(context));
Vector<String> stringVector = childData.get(i).get(i1);
Ap<String> ap = new Ap(context, stringVector);
rv.setAdapter(ap);
ItemTouchHelperCallBack callBack = new ItemTouchHelperCallBack();
ItemTouchHelper helper = new ItemTouchHelper(callBack);
callBack.set(ap, stringVector);
helper.attachToRecyclerView(rv);
return convertView;
}
class ItemTouchHelperCallBack extends ItemTouchHelper.Callback{
Ap<String> ap = null; Vector<String> datas = null;
public void set(Ap<String> ap, Vector<String> datas) {
this.ap = ap;
this.datas = datas;
}
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)