Wie erhalte ich beim Ziehen und Ablegen des RecyclerView-Adapters einen neuen Positionswert?Problem beim Positionswert beim Ziehen und Ablegen in RecyclerView android
Drag and Drop funktioniert perfekt, aber wenn ich setOnClickListener zu öffnen, um meine Detailaktivität zu öffnen. es gibt mir den alten Positionswert.
Zum Beispiel:
Wenn i zweites Element ziehen (INDEX 1) und Drop in der 1. Position des Objekts (Index 0).
Beim Debuggen in SetOnClickListener, wenn ich Intent aufrufen. Positionswert ist 1 (INDEX 1), aber was ich brauche, ist der Wert 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);
}
}
Für Drag & Drop-i 2 Klassen erstellt haben.
1) CustomItemTouchHelper erstreckt ItemTouchHelper.Callback
Klasse
//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) Schnittstelle für OnMove Methode
void onMove(int oldPosition, int newPosition);
diese Methode in der Aktivität Implementiert
ItemTouchHelper.Callback callback = new CustomItemTouchHelper(this);
ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
touchHelper.attachToRecyclerView(list);
Schnittstelle in Aktivität implementiert.
onMove(int oldPosition, int newPosition) {
Collections.swap(mNames, oldPosition, newPosition);
adapter.notifyItemMoved(oldPosition, newPosition);
}
- RICHTIG oder mich leiten, wenn etwas, was fehlt.
- Danke & Grüße.
Vielleicht haben Sie ein Problem mit dem 'swap()' Anruf nicht, was Sie meinen? Eine mögliche Lösung finden Sie unter https://stackoverflow.com/a/46363659/172690. –