2015-01-31 3 views
1

나는 각 항목을 클릭했을 경우 체크 박스에 체크 (해제)하는 것입니다 무엇을 달성하려고하는 간단한 텍스트 뷰 + 체크 박스안드로이드 Recyclerview 여러 온 클릭 항목

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/title" 
    android:layout_width="0dp" 
    android:layout_weight="5" 
    android:layout_height="wrap_content" 
    /> 
<CheckBox 
    android:id="@+id/chk" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:layout_height="wrap_content" /> 
</LinearLayout> 

있는 recyclerview을하려합니다. 그러나 텍스트 뷰가 클릭되면 전체 항목에 대해 리플 애니메이션을 수행하고 조각 전환을 시작하십시오.

내가 온라인 예를 찾을 수 없습니다와 내가 찾은 그 가장 가까운 RecyclerView onClick

내가 코드

@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.getChildPosition(childView)); 
    return true; 
} 
return false; 

}

에, 그러나 작동하려면 온 클릭을 얻을 수 있었다이었다 문제는 반환 된 childView가 textlay 또는 checkbox가 아닌 linearlayout이라는 것입니다. 따라서 클릭이 텍스트보기 또는 확인란에서 수행되었는지 여부를 확인할 수 없습니다.

내가 누락 된 것이 있습니까? 이상적으로 누군가가 이것을 구현하는 방법에 대한 실용적인 예를 가지고 있다면 그것은 좋을 것입니다.

감사합니다. 여기

+0

왜 그 뷰에 대해 일반 리스너를 설정하지 않습니까? – pskink

+0

리플 효과는 기본적으로 recyclerview에 있습니다. 하지만 그래, 텍스트 뷰를 클릭하여 체크 박스에 대한 효과를주기 위해 개별적으로해야하는 것처럼 점점 더 많이 보입니다. – AndroidP

답변

2

당신은 갈 :

귀하의 목록에있는 항목 XML :

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:background="?attr/selectableItemBackground" 
android:layout_height="72dp"> 

<TextView 
    android:id="@+id/title" 
    android:layout_width="wrap_content" 
    android:text="My Text" 
    android:layout_gravity="left|center_vertical" 
    android:paddingLeft="16dp" 
    android:layout_height="wrap_content" /> 

<CheckBox 
    android:id="@+id/checkbox" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="16dp" 
    android:layout_gravity="right|center_vertical" /> 

(나는 FrameLayout 루트로 사용했습니다하지만 LinearLayout 아마도 잘 작동합니다.)

과의 RecyclerViewAdapter은 다음과 같이 사용합니다.

  @Override 
      public YourViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
       View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, viewGroup, false); 

       itemView.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Log.w("Test", "Parent clicked"); 
        } 
       }); 
       return new YourViewHolder(itemView); 

      } 

      @Override 
      public void onBindViewHolder(YourViewHolder viewHolder, int i) { 

       viewHolder.checkBox.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Log.w("Test", "Checkbox clicked"); 
        } 
       }); 
      } 
+0

checkBox 수신기의 onClick이 트리거되지 않았습니다 .... –