安卓:采用触摸框架处理回收的视图项内的图像视图点击 [英] Android: handling clicks on image view inside recycler's view item using touch framework

查看:226
本文介绍了安卓:采用触摸框架处理回收的视图项内的图像视图点击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图捕捉的ImageView 被包围的 RecyclerView 项里面的点击。我已实施 RecyclerView.OnItemTouchListener 并拥有手势检测过程中正常的点击和长时间preSS运动事件的 RecyclerView 项目。

I am trying to capture the clicks on ImageView which is enclosed inside the RecyclerView item. I have implemented RecyclerView.OnItemTouchListener and has gesture detector process the motion events for normal clicks and long press on RecyclerView item.

因为我想有相同的触摸框架来处理在 RecylcerView 项目内子视图触摸事件,我已设置 View.OnTouchListener 通过图像视图,以及,重写 onTouch 实施返回true希望触摸应由的ImageView 它被点击的时候。

Since I want to have the same touch framework to process touch event on child views inside the RecylcerView item, I have set View.OnTouchListener with the image view as well, overriding the onTouch implementation returning true hoping that the touch shall be consumed by the ImageView when it gets clicked.

我故意在 onInterceptTouchEvent 返回false总是从 RecyclerView ,希望孩子的意见先处理该事件,并如果没有他们,那么消耗 RecyclerView 的项目视图中 onTouchEvent 处理应当办理的点击的手势事件。

I am intentionally returning false in onInterceptTouchEvent always from the RecyclerView, hoping the child views process the event first and if none of them consumes then RecyclerView's item view shall handle the gesture event for clicks during onTouchEvent handling.

通过上面的了解我能够收到关于 ImageView的触摸事件当点击它。

With the above understanding I am able to receive touch events on the ImageView when clicked on it.

问题是,当我点击 RecyclerView 项目的ImageView 之外RecyclerView onTouchEvent 是没有得到所谓的。我触摸框架的理解是,如果子视图不处理触摸事件时,的 onTouchEvent RecyclerView 应该得到一个机会去处理相同。然而,这不是我所能够实现。

The problem is that, when I click on the RecyclerView item outside ImageView, RecyclerView's onTouchEvent is not getting called at all. my understanding of the touch framework is that if child views doesn't process the touch event, the RecyclerView's onTouchEvent should get a chance to process the same. However this is not what i am able to achieve.

任何人都可以提出什么发生的背后,什么是处理单击事件上面的正确方法是什么?

Can anyone suggest what is happening behind and what is the correct way to process click events for the above?

推荐答案

这将解决你的问题:

public class OnItemClickListener implements View.OnClickListener {
    private int position;
    private OnItemClickCallback onItemClickCallback;

    public OnItemClickListener(int position, OnItemClickCallback onItemClickCallback) {
        this.position = position;
        this.onItemClickCallback = onItemClickCallback;
    }

    @Override
    public void onClick(View view) {
        onItemClickCallback.onItemClicked(view, position);
    }

    public interface OnItemClickCallback {
        void onItemClicked(View view, int position);
    }
}

获取的OnItemClickCallback'接口的实例,并把它放在你的活动或片段:

Get an instance of 'OnItemClickCallback' interface and put it in your activity or fragment:

private OnItemClickListener.OnItemClickCallback onItemClickCallback = new OnItemClickListener.OnItemClickCallback() {
    @Override
    public void onItemClicked(View view, int position) {
        // switch(view.getId()) ...
    }
};

然后,传递回调到您recyclerView:

Then, pass that callback to your recyclerView:

recyclerView.setAdapter(new SimpleStringRecyclerViewAdapter(Arrays.asList("1", "2", "3"), onItemClickCallback));

最后,这将是您的适配器:

Finally, this would be your adapter:

public class SimpleStringRecyclerViewAdapter extends RecyclerView.Adapter<SimpleStringRecyclerViewAdapter.ViewHolder> {
    private List<String> mValues;
    private OnItemClickListener.OnItemClickCallback onItemClickCallback;

    public SimpleStringRecyclerViewAdapter(List<String> items, OnItemClickListener.OnItemClickCallback onItemClickCallback) {
        mValues = items;
        this.onItemClickCallback = onItemClickCallback;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public final View mView;
        public final TextView mTextView;

        public ViewHolder(View view) {
            super(view);
            mView = view;
            mTextView = (TextView) view.findViewById(R.id.txt_title);
        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        holder.mTextView.setText(mValues.get(position));
        holder.mView.setOnClickListener(new OnItemClickListener(position, onItemClickCallback));
        holder.mTextView.setOnClickListener(new OnItemClickListener(position, onItemClickCallback));
    }

    @Override
    public int getItemCount() {
        return mValues.size();
    }
}

这篇关于安卓:采用触摸框架处理回收的视图项内的图像视图点击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆