Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 保存拖动后所做的更改';n';Android-I';我什么都读了_Java_Android_Android Recyclerview_Drag And Drop_Android Room - Fatal编程技术网

Java 保存拖动后所做的更改';n';Android-I';我什么都读了

Java 保存拖动后所做的更改';n';Android-I';我什么都读了,java,android,android-recyclerview,drag-and-drop,android-room,Java,Android,Android Recyclerview,Drag And Drop,Android Room,我有一个具有拖放功能的RecyclerView。拖放在自定义适配器中完成。将空间用于数据库,实体将不会以“删除”顺序保存 我尝试了十几种不同的方法/方法: 甚至提到: …而且名单还在继续 我从一堆不同的来源拼凑了代码: 我的自定义适配器: public class SwipeAdapt extends OmegaRecyclerView.Adapter<SwipeAdapt.ViewHolder> { public void onItemDismiss(in

我有一个具有拖放功能的RecyclerView。拖放在自定义适配器中完成。将空间用于数据库,实体将不会以“删除”顺序保存

我尝试了十几种不同的方法/方法:

  • 甚至提到:

…而且名单还在继续

我从一堆不同的来源拼凑了代码:

我的自定义适配器:

public class SwipeAdapt extends OmegaRecyclerView.Adapter<SwipeAdapt.ViewHolder> {

    public void onItemDismiss(int position) {
        accountList.remove(position);
        notifyItemRemoved(position);
    }
    public boolean onItemMove(int fromPosition, int toPosition) {
        if (fromPosition < toPosition) {
            for (int i = fromPosition; i < toPosition; i++) {
                Collections.swap(accountList, i, i + 1);
            }
        } else {
            for (int i = fromPosition; i > toPosition; i--) {
                Collections.swap(accountList, i, i - 1);
            }
        }

        notifyItemMoved(fromPosition, toPosition);

        return true;
    }

    public void onItemClear() {
        for (int count = 0; count < accountList.size(); count++) {
            Account u = accountList.get(count);
            u.setId(count);
            upAccount(u);
        }
        notifyDataSetChanged();
    }

希望这不会太多。如果有人愿意,我可以把整个东西放到GitHub上。我没有发现任何错误。一切看起来都很好。根据所有这些消息来源,我做得对。我“通知”了一切,诸如此类。然而,每次活动发生变化时,RecyclerView顺序都会恢复到拖放之前的状态。非常感谢您的帮助。蒂亚

在方法ONIMMOVE的底部,使用新位置更新数据库中的所有数据。

在方法ONIMMOVE的底部,使用新位置更新数据库中的所有数据。

如果您希望在关闭应用程序或移动到其他活动后保留项目的顺序,您需要向实体文件添加一个属性,该属性将作为订单值提供给服务器。添加后,您可以访问dao并在对项目重新排序后在方法onItemMove中运行更新SQL,然后在每次加载列表时,返回按该属性排序的项目。我想您没有代码来备份您的断言吗?如果您希望在关闭应用程序或移动到其他活动后保留项目的顺序,您需要向实体文件添加一个属性,该属性将作为订单值提供给服务器。添加后,您可以访问dao并在对项进行重新排序后在方法onItemMove中运行更新SQL,然后在每次加载列表时返回按该属性排序的项。我想您没有代码来备份您的断言吗?
    OmegaRecyclerView RVMain;
    Account crossOver;

    private ItemTouchHelper itemTouchHelper;


        RVMain = (OmegaRecyclerView) findViewById(R.id.theRV);
        RVMain.setLayoutManager(new LinearLayoutManager(this));
        getAccounts();
    }

    private void getAccounts() {
        class GetAccounts extends AsyncTask<Void,Void,List<Account>> {

            @Override
            protected List<Account> doInBackground(Void... voids) {
                List<Account> aList = DataClient.getInstance(getApplicationContext()).getAppDB().theDao().getAll();
                return aList;
            }

            @Override
            protected void onPostExecute(List<Account> accounts) {
                super.onPostExecute(accounts);
                SwipeAdapt adapter = new SwipeAdapt(MainActivity.this, accounts);
                RVMain.setAdapter(adapter);
                DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(RVMain.getContext(), new LinearLayoutManager(getApplicationContext()).getOrientation());
                RVMain.addItemDecoration(dividerItemDecoration);
                ItemTouchHelper.Callback callback = new SimpleItemTouchHelperCallback(adapter);
                itemTouchHelper = new ItemTouchHelper(callback);
                itemTouchHelper.attachToRecyclerView(RVMain);
            }
        }

        GetAccounts ga = new GetAccounts();
        ga.execute();
    }
}
public class SimpleItemTouchHelperCallback extends ItemTouchHelper.Callback {
    private final SwipeAdapt mAdapter;

    @Override
    public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
        int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
        //int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
        return makeMovementFlags(dragFlags, 0);
    }

    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
        mAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
        return true;
    }

    @Override
    public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
        if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
            if (viewHolder instanceof ItemTouchHelperViewHolder) {
                ItemTouchHelperViewHolder itemViewHolder = (ItemTouchHelperViewHolder) viewHolder;
                itemViewHolder.onItemSelected();
            }
        }

        super.onSelectedChanged(viewHolder, actionState);
    }
    @Override
    public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        super.clearView(recyclerView, viewHolder);
            mAdapter.onItemClear();
    }
}