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(位置)
insideisLongPressDragEnabled
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()