Bin*_*abu 2 java android gesture android-recyclerview
我有一个Fragment实现RecyclerView.OnItemTouchListener.如何仅将单击和长按动作事件从RecyclerView传递到GestureDetectorCompat.这就是我的意思是我只想处理点击和长按,其他事件应该由RecyclerView处理,因为它会正常发生.我怎么设置它?
public class MyFragment extends Fragment implements RecyclerView.OnItemTouchListener,
        GestureDetector.OnGestureListener {
    protected RecyclerView recyclerView;
    protected RecyclerView.Adapter adapter;
    protected LinearLayoutManager layoutManager;
    private GestureDetectorCompat detector;
    public MyFragment() {
        // Required empty public constructor
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.myfrag, container, false);
        recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview);
        layoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.addOnItemTouchListener(this);
        adapter = new MyAdapter(myData));
        recyclerView.setAdapter(adapter);
        return rootView;
    }
    @Override
    public boolean onDown(MotionEvent e) {
        return false;
    }
    @Override
    public void onShowPress(MotionEvent e) {
    }
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        return false;
    }
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        return false;
    }
    @Override
    public void onLongPress(MotionEvent e) {
    }
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        return false;
    }
    @Override
    public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent event) {
        return false;
    }
    @Override
    public void onTouchEvent(RecyclerView recyclerView, MotionEvent event) {
    }
}
wpi*_*ski 25
你必须GestureDetectorCompat在onCreateView()方法中初始化:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.myfrag, container, false);
    detector = new GestureDetectorCompat(getActivity(), new RecyclerViewOnGestureListener());
    recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview);
    layoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.addOnItemTouchListener(this);
    adapter = new MyAdapter(myData));
    recyclerView.setAdapter(adapter);
    return rootView;
}
RecyclerViewOnGestureListener是你自己的内部类扩展SimpleOnGestureListener(提供OnGestureListener方法的空实现)
private class RecyclerViewOnGestureListener extends SimpleOnGestureListener {
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        View view = recyclerView.findChildViewUnder(e.getX(), e.getY());
        int position = recyclerView.getChildPosition(view);
        // handle single tap
        return super.onSingleTapConfirmed(e);
    }
    public void onLongPress(MotionEvent e) {
        View view = recyclerView.findChildViewUnder(e.getX(), e.getY());
        int position = recyclerView.getChildPosition(view);
        // handle long press
        super.onLongPress(e);
    }
}
现在看一下line(来自onCreateView()方法):
recyclerView.addOnItemTouchListener(this);
在我们的例子中,'this' OnItemTouchListener包含两个我们需要实现的方法:
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
    detector.onTouchEvent(e);
    return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
以下解释了这些方法的含义:https: //developer.android.com/reference/android/support/v7/widget/RecyclerView.OnItemTouchListener.html
这就是您处理单击和长按事件所需的全部内容RecyclerView.
| 归档时间: | 
 | 
| 查看次数: | 15463 次 | 
| 最近记录: |