有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java保存在Android中拖放RecyclerView后所做的更改我已经阅读了所有内容

我有一个具有拖放功能的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();
    }

我的主要活动(Java):

    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();
    }
}

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


共 (1) 个答案

  1. # 1 楼答案

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