Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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 如何正确使用ItemTouchHelper_Java_Android_Android Recyclerview_Itemtouchhelper - Fatal编程技术网

Java 如何正确使用ItemTouchHelper

Java 如何正确使用ItemTouchHelper,java,android,android-recyclerview,itemtouchhelper,Java,Android,Android Recyclerview,Itemtouchhelper,我正在尝试将RecyclerView与ItemTouchHelper结合使用,以实现基本的“拖放”和“刷卡关闭”实现。 滑动工作正常,项目在适配器中被正确删除,动画正确,但“拖放”行为非常奇怪。长时间单击后,视图不会移动,但在适配器中交换项目是正确的 “我的演示者”、“onSelectedChanged”和“clearView”中的此代码仅用于清楚演示如何选择项目 addedCitiesRecycler.setLayoutManager(llmAddedCities); a

我正在尝试将
RecyclerView
ItemTouchHelper
结合使用,以实现基本的“拖放”和“刷卡关闭”实现。 滑动工作正常,项目在适配器中被正确删除,动画正确,但“拖放”行为非常奇怪。长时间单击后,视图不会移动,但在适配器中交换项目是正确的

“我的演示者”、“onSelectedChanged”和“clearView”中的此代码仅用于清楚演示如何选择项目

    addedCitiesRecycler.setLayoutManager(llmAddedCities);

    adapterAddedCities = new AdapterAddedCities();


    ItemTouchHelper.SimpleCallback callback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.START | ItemTouchHelper.END) {
        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            adapterAddedCities.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
            return true;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            adapterAddedCities.onItemDismiss(viewHolder.getAdapterPosition());
        }

        @Override
        public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
            if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
                AdapterAddedCities.ViewHolder holder = (AdapterAddedCities.ViewHolder) viewHolder;
                holder.itemView.setBackgroundColor(Color.LTGRAY);
            }
            super.onSelectedChanged(viewHolder, actionState);
        }

        @Override
        public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            AdapterAddedCities.ViewHolder holder = (AdapterAddedCities.ViewHolder) viewHolder;
            holder.itemView.setBackgroundColor(0);
        }
    };

    itemTouchHelper = new ItemTouchHelper(callback);
    itemTouchHelper.attachToRecyclerView(addedCitiesRecycler);
这是我的适配器中的方法

public void onItemDismiss(int position) {
    citiesData.remove(position);
    notifyItemRemoved(position);
}

public void onItemMove(int fromPosition, int toPosition) {
    CityInfo tmp = citiesData.remove(fromPosition);
    citiesData.add(toPosition > fromPosition ? toPosition - 1 : toPosition, tmp);
    notifyItemMoved(fromPosition, toPosition);
}

我已经在build.gradle中将
com.android.support:recyclerview-v7:26.0.0-alpha1
更新为
com.android.support:recyclerview-v7:27.0.0
,运行良好


我认为这是库中的错误,因此如果您面临相同的问题,请将库更新为最新版本。

请将资源直接嵌入到您的问题中。@MaciejJureczko感谢您的建议,但我无法嵌入图片,因为缺少信誉点。