У меня RecyclerView
, что HORIZONTAL
.Ширина каждого элемента в нем почти равна общей ширине переработчика.Видно только до 3 ViewHolders
.
Вот несколько макетов для лучшего понимания того, как выглядит результат.
IЯ хочу добавить возможность изменять положение карточек в моем RecyclerView
, поэтому я создал ItemTouchHelper.Callback
и прикрепил его к RecyclerView
.
После долгого нажатия на любую карту я могу перетащить ее влево и вправо,Когда я подношу его к краю экрана, RecyclerView
автоматически начнет прокручиваться, и мой взгляд исчезнет.
Из того, что я смог выяснить, я предполагаю, что он просто будет переработан - вызывается ItemTouchHelper#clearView(RecyclerView, RecyclerView$ViewHolder)
иэто происходит от RecyclerView#removeDetachedView(View)
.
Есть ли кто-нибудь, я мог обойти это поведение?
ItemTouchHelper.Callback drag = new ItemTouchHelper.Callback() {
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
int dragFlags = ItemTouchHelper.START | ItemTouchHelper.END | ItemTouchHelper.UP | ItemTouchHelper.DOWN;
return makeMovementFlags(dragFlags, ItemTouchHelper.ACTION_STATE_IDLE);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
int oldPosition = viewHolder.getAdapterPosition();
int newPosition = target.getAdapterPosition();
Log.d(getClass().getSimpleName(), String.format("View moved from %d to %d", oldPosition, newPosition));
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
// Not applicable
}
};
mView.recycler.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
mView.recycler.setAdapter(mAdapter = new SimpleAdapter());
ItemTouchHelper touchHelper = new ItemTouchHelper(drag);
touchHelper.attachToRecyclerView(mView.recycler);