Search code examples
javaandroidandroid-cardviewcardview

Android cardview change position with drag and drop


I want to make my cardviews inside a fragment(Navigation Drawler) able to change the position in the list with drag and drop.

my layout file structure:

FrameLayout{
LinearLayout{
cardview_1
card_view_2}}

Solution

  • Use a recyclerView and make the rowItemLayout.xml or columnItemLayout.xml with cardView as root View. Then use the functions of recyclerView such as:

    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(createHelperCallback());
    itemTouchHelper.attachToRecyclerView(recyclerView);
    private ItemTouchHelper.Callback createHelperCallback() {
        ItemTouchHelper.SimpleCallback simpleItemTouchCallback =
                new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN,
                        ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
                    @Override
                    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
                                          RecyclerView.ViewHolder target) {
                        moveItem(viewHolder.getAdapterPosition(), target.getAdapterPosition());
                        return true;
                    }
    
                    @Override
                    public void onSwiped(final RecyclerView.ViewHolder viewHolder, int swipeDir) {
                        deleteItem(viewHolder.getAdapterPosition());
                    }
                };
        return simpleItemTouchCallback;
    }
     private void moveItem(int oldPos, int newPos) {
    
        ListItem item = (ListItem) listData.get(oldPos);
        listData.remove(oldPos);
        listData.add(newPos, item);
        adapter.notifyItemMoved(oldPos, newPos);
    }
    
    private void deleteItem(final int position) {
        listData.remove(position);
        adapter.notifyItemRemoved(position);
    }