Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.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 通知recyclerview项目,当其处于移动状态时,不会中断_Java_Android_Android Recyclerview - Fatal编程技术网

Java 通知recyclerview项目,当其处于移动状态时,不会中断

Java 通知recyclerview项目,当其处于移动状态时,不会中断,java,android,android-recyclerview,Java,Android,Android Recyclerview,我在回收视图中有可扩展的行布局,通常它们是扩展的。 已尝试使用ItemTouchHelper.SimpleCallback到RecyclerView以使用onMove()移动行。一切都是正确的,正确移动行 ItemTouchHelper.SimpleCallback: @Override public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @N

我在回收视图中有可扩展的行布局,通常它们是扩展的。 已尝试使用
ItemTouchHelper.SimpleCallback
RecyclerView
以使用
onMove()
移动行。一切都是正确的,正确移动行

ItemTouchHelper.SimpleCallback:

@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {

    int fromPosition = viewHolder.getAdapterPosition();
    int toPosition = target.getAdapterPosition();

    Collections.swap(adapter.getShelves(), fromPosition, toPosition);
    adapter.notifyItemMoved(fromPosition, toPosition);

    return true;
}

// Minifying the rows before the onMove is started:
@Override
public boolean isLongPressDragEnabled() {
    adapter.minifyRow(position);
    return true;
}
在启动onMoving()之前,长按时应缩小行数。然后,应在没有任何中断的情况下开始移动。问题是长按时开始拖动和缩小行,但此时会中断拖动。因此它不会拖动或移动行。如何用notify模拟onMove

在适配器类中:

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {    
    boolean rowIsExpanded = rows.get(position).isExpanded();
    if(rowIsExpanded){
        holder.rowLayout.setVisibility(View.VISIBLE);
    } else {
        holder.rowLayout.setVisibility(View.GONE);
    }   
}

public void minifyRow(boolean situation, int adapterPos){
    RowModel row = rows.get(adapterPos);
    row.setExpanded(situation);
    notifyItemChanged(adapterPos);
}

您不应该调用
adapter.minifyRow(位置)
inside
isLongPressDragEnabled
it仅标记检查适配器是否启用长按。您应该覆盖所选更改的
。删除
isLongPressDragEnabled中的方法并尝试此操作

    @Override
    public void onSelectedChanged(@Nullable RecyclerView.ViewHolder viewHolder, int actionState) {
        if (viewHolder != null && actionState == ItemTouchHelper.ACTION_STATE_DRAG) {
            ((YourViewHolder)viewHolder).rowLayout.setVisibility(View.GONE);
        }
    }

当您仅处理LongPress时,它会在ViewHolder内部调用,您能显示您的代码吗?使用
ItemTouchHelper处理长按
isLongPressDragEnabled()
。SimpleCallback
,没有其他方法。谢谢,工作正常,但如何访问所有ViewHolder.rowLayouts?访问所有用户是什么意思?您是指行布局中的元素,对吗?实际上,你可以访问你的支架。这意味着如果你在支架中找到视图,它可以直接获取。不,我是指代码中的行布局,用于RecyclerView上的当前位置项目,如何访问其他项目的行布局?对于当前位置,你可以调用viewHolder.getAdapterPostion()