Ich muss die Position des Elements in der MotionEvent.ACTION_DOWN abrufen und nach dem Verschieben erhält das Element seine letzte Position (MotionEvent.ACTION_UP). Aber wenn ich im onInterceptTouchEvent Return false schrieb, wird MotionEvent.ACTION_UP nicht aufgerufen. Und wenn ich im onInterceptTouchEvent true schrieb, wurde ACTION_UP aufgerufen, aber die Recycler-View-Ereignisse blockiert.Wie fangen Sie ACTION.MOVE_UP, ohne Recycler zu blockieren Ereignis anzeigen?
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (e.getAction() == MotionEvent.ACTION_UP) {
Log.d("Action", "ACTION_UP");
Log.d("view", ((TextView)childView.findViewById(R.id.quest_row_title)).getText().toString());
}
if (e.getAction() == MotionEvent.ACTION_DOWN) {
Log.d("Action", "ACTION_DOWN");
Log.d("view", ((TextView)childView.findViewById(R.id.quest_row_title)).getText().toString());
Integer count = view.getChildAdapterPosition(childView);
}
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
}
return false;
}
public class PageRecyclerView extends RecyclerView.Adapter<PageRecyclerView.PageViewHolder> implements ItemTouchHelperAdapter {
private ArrayList<Page> pages;
public static HashMap<Integer, Editable> editable;
public PageRecyclerView (ArrayList<Page> pages)
{
this.pages = pages;
}
@Override
public PageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View addView = LayoutInflater.from(parent.getContext()).inflate(R.layout.page_row, parent, false);
return new PageViewHolder(addView);
}
@Override
public void onBindViewHolder(PageViewHolder holder, int position) {
holder.title.setText(pages.get(position).getTitle());
holder.idPage.setText(String.valueOf(pages.get(position).getIdPage()));
holder.countSteps.setText(String.valueOf(pages.get(position).getCountSteps()));
}
@Override
public int getItemCount() {
return pages.size();
}
@Override
public void onItemDismiss(int position) {
pages.remove(position);
notifyItemRemoved(position);
}
@Override
public void onItemMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, int fromPos, RecyclerView.ViewHolder target, int toPos, int x, int y) {
Log.d("Positions moved", "Fromposition"+fromPos+"toPosition"+toPos);
Log.d("Positions movedkj", "With id"+((PageViewHolder)viewHolder).idPage.getText().toString()+"toPosition WIth id"+((PageViewHolder)target).idPage.getText().toString());
Integer idFrom = Integer.valueOf(((PageViewHolder)viewHolder).idPage.getText().toString());
Integer idTo= Integer.valueOf(((PageViewHolder)target).idPage.getText().toString());
if((PageViewActivity.editableHashMap.get(idFrom))==null){
PageViewActivity.editableHashMap.put(idTo, new Editable(new Page(idFrom,fromPos), new Page(idTo,toPos)));
}
}
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
Log.d("Positions", "Fromposition"+fromPosition+"toPosition"+toPosition+"Listsize"+pages.size());
if (fromPosition < toPosition) {
for (int i = fromPosition; i < toPosition; i++) {
Collections.swap(pages, i, i + 1);
}
} else {
for (int i = fromPosition; i > toPosition; i--) {
Collections.swap(pages, i, i - 1);
}
}
notifyItemMoved(fromPosition, toPosition);
return true;
}
public static class PageViewHolder extends RecyclerView.ViewHolder {
TextView title;
TextView idPage;
TextView countSteps;
public PageViewHolder(View itemView) {
super(itemView);
title = (TextView)itemView.findViewById(R.id.page_row_title);
idPage = (TextView)itemView.findViewById(R.id.page_row_id_page);
countSteps = (TextView)itemView.findViewById(R.id.page_row_count_steps);
}
}
}
was möchten Sie erreichen? es riecht wie ein [XY-Problem] (http://xyproduct.info/) – pskink
Ich habe eine Drag & Drop-Recycler-Ansicht, und ich möchte von der Elementposition vor dem Verschieben, Position nach dem Verschieben (nach MotionEvent.ACTION_UP) erhalten. –
[ItemTouchHelper] (https://developer.android.com/reference/android/support/v7/widget/helper/ItemTouchHelper.html)? – pskink