2016-06-10 3 views
1

내 RecyclerVIew는 RecyclerView에서 CardView 클릭 할 수 없습니다

내 활동 컨테이너 :

내 조각 :

<android.support.design.widget.AppBarLayout> 

    <android.support.v7.widget.Toolbar/> 

</android.support.design.widget.AppBarLayout> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recycler_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="?actionBarSize" 
    android:clipToPadding="false" 
    android:paddingBottom="8dp" 
    android:paddingLeft="8dp" /> 

내 CardView :

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/card" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="8dp" 
    android:layout_marginTop="8dp" 
    android:clickable="true" 
    android:foreground="?android:attr/selectableItemBackground" 
    app:cardCornerRadius="2dp" 
    app:cardElevation="2dp"> 

    ... 

</android.support.v7.widget.CardView> 

OnClickListener를 :

holder.card.setOnClickListener(new View.OnClickListener() { 
    @Override public void onClick(View v) { 
     Log.d("click","click"); 
    } 
}); 

cardview가 클릭 할 수없는 이유는 무엇입니까? 내가 뭘 잘못 했니?

+0

문제가'CardView' 자체입니까? 다른보기 (예 :'FrameLayout')가 있으면 작동합니까? –

+0

onClickListener를 올바르게 설정 하시겠습니까? –

+0

holder.card.setOnClickListener (새 View.OnClickListener() { @Override 공공 무효 온 클릭 (보기 V) { Log.d (,) "클릭" "클릭", 을} }); – gape

답변

0

RecyclerView는 ListView와 많이 다릅니다. 즉 OnClickListener 설정은 다르게 수행되어야합니다! 다음은 내가하는 일이다.

1 단계 - 클래스를 만들려면 다음과 같이 다시 사용할 수 있습니다 :

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { 

    private GestureDetector mGestureDetector; 
    private OnItemClickListener mListener; 

    public interface OnItemClickListener { 
     void onItemClick(View view, int position); 
     void onItemLongClick(View view, int position); 

    } 

    public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) 
    { 
     mListener = listener; 

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

     @Override 
     public void onLongPress(MotionEvent e){ 
      View childView = recyclerView.findChildViewUnder(e.getX(), e.getY()); 

      if(childView != null && mListener != null){ 
       mListener.onItemLongClick(childView, recyclerView.getChildAdapterPosition(childView)); 
      } 
     } 
     }); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) 
    { 
     View childView = view.findChildViewUnder(e.getX(), e.getY()); 

     if(childView != null && mListener != null && mGestureDetector.onTouchEvent(e)){ 
     mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); 
     } 

     return false; 
    } 

    @Override 
    public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {} 

    @Override 
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

    } 
} 

를 이제이 클래스를 가지고, 당신은 단순히 같은 당신의 조각 또는 활동 내부에 RecyclerView에 클릭 리스너를 첨부 할 수 있습니다 :

mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, mRecyclerView, new RecyclerItemClickListener 
      .OnItemClickListener() { 
     @Override 
     public void onItemClick(View view, int position) { 
      //handle click events here 
     } 

     @Override 
     public void onItemLongClick(View view, int position) { 
      //handle longClick if any 
     } 
    })); 

나는 CardView와 관련이 없다고 생각하기 때문에 도움이되기를 바랍니다. 행운을 빕니다!

관련 문제