簡體   English   中英

Recyclerview向右滑動方向

[英]Recyclerview swipe direction right

我想知道您是否可以使用itemtouchhelper消除項目,僅當用戶向右滑動時才可以? 我正在使用此代碼,但方向無效

public class CrimeTouchHelper extends ItemTouchHelper.SimpleCallback {
        private CrimeAdapter mMovieAdapter;

        public CrimeTouchHelper(CrimeAdapter movieAdapter){
            super(ItemTouchHelper.UP | ItemTouchHelper.DOWN,     ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
            this.mMovieAdapter = movieAdapter;
        }

        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            //TODO: Not implemented here
            return false;
        }


        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            //Remove item
            Log.e("DIRECTION", direction + "");
            if(direction == 8) {
                mMovieAdapter.remove(viewHolder.getAdapterPosition());
            }
        }
    }`

這很容易做到。 您可以使用此代碼,

ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new
            ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
                @Override
                public boolean onMove(
                        final RecyclerView recyclerView,
                        final RecyclerView.ViewHolder viewHolder,
                        final RecyclerView.ViewHolder target) {
                    return false;
                }

                @Override
                public void onSwiped(
                        final RecyclerView.ViewHolder viewHolder,
                        final int swipeDir) {
                    adapter.remove(viewHolder.getAdapterPosition());
                }
            };

    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(
            simpleItemTouchCallback
    );
    itemTouchHelper.attachToRecyclerView(itemsRecyclerView);

您可以將ItemTouchHelper.RIGHT傳遞為構造函數的第二個參數,該構造函數將實際采用該方向。

使用onSwipe()方法執行您要執行的操作,例如從適配器中刪除項目。

希望這可以幫助。 如果您遇到任何問題,請告訴我。

在CrimeTouchHelper的構造函數中的super方法中進行設置。

第二個參數是滑動方向,因此只需傳遞ItemTouchHelper.RIGHT

super(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.RIGHT);

之后,您可以刪除#onSwiped中的'if'復選框

您當前在#onSwiped中簽入不會阻止刷卡。 假設8是向右滑動的int值,那么您現在要做的就是阻止適配器刪除該項目(但是該項目仍會在視覺上被擦除)。

您應該重寫getMovementFlags方法,並在customItemTouchHelper.Callback類中將滑動標志設置為ItemTouchHelper.START。

 @Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    // Set movement flags based on the layout manager
    if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {
        final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
        final int swipeFlags = 0;
        return makeMovementFlags(dragFlags, swipeFlags);
    } else {
        final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
        final int swipeFlags = ItemTouchHelper.START;
        return makeMovementFlags(dragFlags, swipeFlags);
    }
}

這將阻止從左向右滑動。要向相反方向設置對ItemTouchHelper的標記。END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM