2016-08-13 59 views
0

我有了形象recyclerview,文本&图像按钮,当我使用RecyclertouchListener并添加onItemTouchListener它overclicks按钮,而按钮有onclicklistenerRecyclerTouchListener overclicks在recyclerview按钮

如果我不处理clicklistener对于recyclerview,按钮工作正常。 只有当recyclerview在onItemtouchListener中有某些事情需要做时。

public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener{ 

private GestureDetector gestureDetector; 
ClickListener clickListener; 

public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) 
{ 

    this.clickListener = clickListener; 
    gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() 
    { 
     @Override 
     public boolean onSingleTapUp(MotionEvent e) { 
      return true; 
     } 

     @Override 
     public void onLongPress(MotionEvent e) { 

      View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
      if(child != null && clickListener != null) 
       clickListener.onLongClick(child, recyclerView.getChildAdapterPosition(child)); 

     } 

    }); 

} 

@Override 
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 
    View child = rv.findChildViewUnder(e.getX(), e.getY()); 
    if(child != null && clickListener != null && gestureDetector.onTouchEvent(e)) 
     clickListener.onClick(child, rv.getChildAdapterPosition(child)); 
    return false; 
} 

@Override 
public void onTouchEvent(RecyclerView rv, MotionEvent e) { 

} 

@Override 
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

} 

recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() { 
     @Override 
     public void onClick(View view, int position) { 
      startActivity(new Intent(getActivity(), Show.class).putExtra("show", data.get(position))); 
     } 

     @Override 
     public void onLongClick(View view, int position) { 

     } 
    })); 

回答

0

帮助所以对于RecyclerTouchListener没有办法,我发现将焦点从recyclerview到按钮改变。由于onInterceptTouchEvent窃取视图组的焦点以执行onclick,这意味着它会将整个焦点都移到touch上,以使其子项在此处执行回收视图。因此,回收站内的任何内容都无法拦截。

有关更多说明,请尝试搜索onInterceptTouchEvent的工作方式,以便在点击窗口时传递false,然后为viewgroup指定false,然后调用viewInterceptTouchEvent的recyclerview应用onclick。我也无法调整孩子的规模(recyclerview)。

所以我找到了第二种方法来实现onclk的recycleradapter类&我使它可以从适配器外调用。

谢谢Tara鼓舞一下。下面是在参考[http://alexzh.com/tutorials/recyclerview-click-listener/][1]

她是我改性

1-添加界面点击

public interface ClickListener { 

public void onClick (View view, int position); 

public void onLongClick (View view, int position); 

}

2-在类的代码RecyclerAdapter添加方法setClickListener

public void setClickListener(ClickListener _clickListener) { 
    this.clickListener = _clickListener; 
} 

3-调用clickListener.onClick & onLongClick在onBindViewHolder

@Override 
public void onBindViewHolder(final HawkViewHolder holder, final int position) { 

     holder.itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       clickListener.onClick(view, holder.getPosition()); 
      } 
     }); 

     holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View view) { 
       clickListener.onLongClick(view, holder.getPosition()); 
       return true; 
      } 
     }); 

4-呼叫在活动

 recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 
    recyclerAdapter = new CustomRecyclerAdapter(this); 
    recyclerView.setAdapter(recyclerAdapter); 
    recyclerAdapter.setClickListener(new ClickListener() { 
     @Override 
     public void onClick(View view, int position) { 

     } 

     @Override 
     public void onLongClick(View view, int position) { 
     } 
    }); 
0

添加的onClick监听器RecyclerAdapter一些这样的事。您可以从this

final int position=i; 
    ListRowHolder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(mContext,"Recycler Click"+position+myTitle,Toast.LENGTH_SHORT).show(); 

      Intent intent=new Intent(mContext,ItemDetails.class); 
      intent.putExtra("itemName",myTitle); 
      mContext.startActivity(intent); 
     } 
    }); 
+0

方法recyclerAdapter.setClickListener我尝试了很多使用ItemView控件.onClick它从来没有与我一起工作,也onCreateViewHolder view.onClick。我发现3个引用与我一样编写相同的RecyclerTouchListener。问题在哪里呢?谢谢您的帮助。 – user3614171

相关问题