私は、MotionEvent.ACTION_DOWNの中で要素の位置を取得する必要があります。そして、移動後に、その要素の最後の位置(MotionEvent.ACTION_UP)を取得します。 しかし、onInterceptTouchEventでfalseを返した場合、MotionEvent.ACTION_UPは呼び出されません。 onInterceptTouchEventでtrueを書き込んだとき、ACTION_UPが呼び出されましたが、リサイクラビューイベントはブロックされました。代わりにRecycler ViewイベントをブロックせずにACTION.MOVE_UPをキャッチする方法はありますか?
return false;
の
@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