Android GridView中的RecyclerView';s项破坏GridView';s onclick侦听器
我有这样的布局: 这是一个Android GridView中的RecyclerView';s项破坏GridView';s onclick侦听器,android,gridview,android-recyclerview,Android,Gridview,Android Recyclerview,我有这样的布局: 这是一个GridView,在GridView的每个项目中都有RecyclerViews 我还没有找到任何解决办法,因为我认为这以前从未发生过。例如,在SO或Google群组中找不到 因此,问题是,当我设置RecyclerView时,GridView的方法onItemClick不会被调用,但如果我没有设置RecyclerView,它会被调用。这是两个代码(一个设置RecyclerView,另一个隐藏它): 在GRIDVIEW的项目上设置RECYCLERVIEW @Ove
GridView
,在GridView的每个项目中都有RecyclerView
s
我还没有找到任何解决办法,因为我认为这以前从未发生过。例如,在SO或Google群组中找不到
因此,问题是,当我设置RecyclerView
时,GridView
的方法onItemClick
不会被调用,但如果我没有设置RecyclerView
,它会被调用。这是两个代码(一个设置RecyclerView
,另一个隐藏它):
在GRIDVIEW
的项目上设置RECYCLERVIEW
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
ViewHolderItem viewHolderItem;
if(convertView == null) {
convertView = ((LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.item_mipeticion, viewGroup, false);
viewHolderItem = new ViewHolderItem();
viewHolderItem.palabra_TV = (CustomTextView)convertView.findViewById(R.id.palabra_TV);
viewHolderItem.recyclerView = (RecyclerView)convertView.findViewById(R.id.recyclerView);
convertView.setTag(viewHolderItem);
} else {
viewHolderItem = (ViewHolderItem)convertView.getTag();
}
MyItem item = items.get(position);
String textRandom = item.getTexts().get(0);
viewHolderItem.palabra_TV.setText(textRandom);
ArrayList<Drawable> drawables = item.getDrawables();
final RecyclerViewImagesAdapter mAdapter = new RecyclerViewImagesAdapter(drawables, getActivity());
viewHolderItem.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false));
viewHolderItem.recyclerView.setAdapter(mAdapter);
return convertView;
}
这个怎么了
事先非常感谢
问候
拉斐尔
编辑:我发现不起作用的内容
- 将android:clickable=“false”设置为XML上的RecyclerView
- 处理
的单击并调用RecyclerView
parent.performClick()
- 如@Droidekas所述,设置一个
只处理GestureDetector
的点击,而不处理整个项目的点击(因此RecyclerView
来自onItemClick
)GridView
手势检测器的作业
。因此请使用
然后,您可以添加一个
这将确保所有其他触摸事件由RecyclerView
PS:请确保内部recyclerview中的itemview没有自己的单击事件如果recyclerview不应该是可单击的,您可以为您的.xml android:clickable=“false”设置一个属性。这会将单击事件传播到您的父级。或者,您也可以通过调用孩子的click事件(View)View.getParent()).performClick()。`clickable=“false”`不工作,也不
perfromClick()代码>不,这不起作用。我还尝试将其设置为clickable=false且不起作用:(您是否在onSingleTapMethod中添加了父视图。performclick
?是的,正如我的问题评论中提到的抱歉,已更正。它只处理RecyclerView
单击,而不处理项目单击。RecyclerView项目的父视图将是RecyclerView。您需要获取RecyclerView的父视图。)
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
ViewHolderItem viewHolderItem;
if(convertView == null) {
convertView = ((LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.item_mipeticion, viewGroup, false);
viewHolderItem = new ViewHolderItem();
viewHolderItem.palabra_TV = (CustomTextView)convertView.findViewById(R.id.palabra_TV);
viewHolderItem.recyclerView = (RecyclerView)convertView.findViewById(R.id.recyclerView);
convertView.setTag(viewHolderItem);
} else {
viewHolderItem = (ViewHolderItem)convertView.getTag();
}
MyItem item = items.get(position);
String textRandom = item.getTexts().get(0);
viewHolderItem.palabra_TV.setText(textRandom);
ArrayList<Drawable> drawables = item.getDrawables();
final RecyclerViewImagesAdapter mAdapter = new RecyclerViewImagesAdapter(drawables, getActivity());
viewHolderItem.recyclerView.setVisibility(View.GONE); // just not setting the adapter and hidding it
return convertView;
}
final GestureDetector gd = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
//perform parent view click
return true;
}
});
recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
return gd.onTouchEvent(e);
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});