Как получить новое значение позиции во время перетаскивания адаптера RecyclerView?Облицовочная проблема в позиции Значение во время перетаскивания в RecyclerView android
Перетаскивание работает идеально, но когда я устанавливаю setOnClickListener, чтобы открыть свою активность. он дает мне старую позицию.
Например:
Если я перетащить 2-й элемент (индекс 1) и падение в позиции 1-го элемента (INDEX 0).
Об отладке внутри setOnClickListener, когда я вызываю Intent. Значение позиции равно 1 (INDEX 1), но мне нужно значение 0 (INDEX 0).
@Override
public void onBindViewHolder(final ItemViewHolder holder, final int position) {
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(activity, DetailActivity.class);
intent.putExtra("NAME_POSITION", position);
intent.putParcelableArrayListExtra("NAME_LIST", mName);
((Activity) context).startActivityForResult(intent, 800);
}
}
перетаскивания я создал 2 классов.
1) CustomItemTouchHelper расширяет ItemTouchHelper.Callback
класса
//Interface interface
public ItemTouchHelper(Interface interface) {
this.interface = interface;
}
@Override
public boolean isLongPressDragEnabled() {
return true;
}
@Override
public boolean isItemViewSwipeEnabled() {
return false; // swiped disabled
}
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; // movements drag
return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG, dragFlags); // as parameter, action drag and flags drag
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
interface.onMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); // information to the interface
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
// swiped disabled
}
2) интерфейс для метода OnMove
void onMove(int oldPosition, int newPosition);
Реализован этот метод в деятельности
ItemTouchHelper.Callback callback = new CustomItemTouchHelper(this);
ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
touchHelper.attachToRecyclerView(list);
интерфейс реализован в деятельности.
onMove(int oldPosition, int newPosition) {
Collections.swap(mNames, oldPosition, newPosition);
adapter.notifyItemMoved(oldPosition, newPosition);
}
- ПРАВИЛЬНО или ГИД меня, если некоторые вещи не хватает.
- Thanks & С уважением.
Возможно, у вас возникла проблема с вызовом 'swap()' не делать того, что вы имеете в виду? См. Https://stackoverflow.com/a/46363659/172690 для возможного решения. –