问题描述
我试图捕捉的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();
}
}
这篇关于安卓:采用触摸框架处理回收的视图项内的图像视图点击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!