我需要在MotionEvent.ACTION_DOWN中獲取元素的位置,並在移動元素獲取其最後位置(MotionEvent.ACTION_UP)之後。 但是,當我寫onInterceptTouchEvent返回false時,MotionEvent.ACTION_UP不會被調用。 而當我在onInterceptTouchEvent中寫入true時,它將被調用ACTION_UP,但會阻止回收站視圖事件。如何在不阻止Recycler View事件的情況下捕獲ACTION.MOVE_UP?
@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);
}
}
}
你想達到什麼目的?它聞起來像一個[XY問題](http://xyproblem.info/) – pskink
我有一個拖放recyclerview,我想要獲得的元素位置之前移動,移動後(MotionEvent.ACTION_UP後)的位置。 –
[ItemTouchHelper](https://developer.android.com/reference/android/support/v7/widget/helper/ItemTouchHelper.html)? – pskink