【发布时间】:2016-05-04 09:53:12
【问题描述】:
我有一个 RecyclerView - Grid,带有拖放功能,使用这个code 我已经设法实现了这一点,并且做了很多更改,只有一个问题,我无法在重新启动时保存拖动的项目位置(应用程序不是手机)。 我想的是在我的 item.java 构造函数中添加“int position”,但我不能做的是得到改变的位置。
我正在使用链接中提供的相同拖放代码。
ItemTouchHelper.Callback _ithCallback = new ItemTouchHelper.Callback() {
//and in your imlpementaion of
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
// get the viewHolder's and target's positions in your adapter data, swap them
Collections.swap(AllItems, viewHolder.getAdapterPosition(), target.getAdapterPosition());
// and notify the adapter that its dataset has changed
rcAdapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
//TODO
}
//defines the enabled move directions in each state (idle, swiping, dragging).
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG,
ItemTouchHelper.DOWN | ItemTouchHelper.UP | ItemTouchHelper.START | ItemTouchHelper.END);
}
};
这是 onCreate 中的代码:
ItemTouchHelper ith = new ItemTouchHelper(_ithCallback);
ith.attachToRecyclerView(RcView);
位置改变后获取重复项,代码:
@Override
public void onStop()
{
super.onStop();
SharedPreferencesTools.setOrderedItems(this, AllItems);
}
getAllItemList:
private List<Item> getAllItemList(){
AllItems = SharedPreferencesTools.getOrderedItems(this);
//Add item .. etc
//return items
}
【问题讨论】:
-
可能是一个笨蛋?
-
请注意,位置是自动添加的,不是手动设置的。
-
我是否理解正确,您希望在应用程序运行之间保持
AllItems状态,对吗? -
我有7个项目,每个添加的项目都根据它添加的位置获得一个位置,就像位置0的WiF,位置1的蓝牙,用户将长按并修改位置,现在..用户将杀死应用程序,当他回来时,位置将被重置并返回默认值,我想要的是保持更改的位置。
-
好的,我明白了。然后在下面查看我的答案:-)
标签: android drag-and-drop android-recyclerview