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上执行除单击之外的所有其他操作:

你需要区分这些手势。
手势检测器的作业
。因此请使用

然后,您可以添加一个

这将确保所有其他触摸事件由
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) {

            }
        });