2015-01-31 86 views
1

我想有一個recyclerview其中每個項目是一個簡單的TextView +複選框的Android Recyclerview多的onclick項目

<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> 

我所試圖實現的是一個(不)選中複選框,如果點擊它。但是,如果單擊textview,然後對整個項目執行漣漪動畫並開始片段轉換。

我不能在網上找到一個例子,我發現最接近的是RecyclerView onClick

我設法得到的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是linearlayout而不是textview或複選框。因此我無法確定點擊是在textview還是複選框上完成的。

有什麼,我失蹤?理想情況下,如果有人有一個如何實施這個實例的工作示例,那就太好了。

謝謝。

+0

爲什麼不爲該視圖設置正常的聽衆? – pskink 2015-01-31 18:40:32

+0

因爲我喜歡默認情況下ripple效果recyclerview。但是,是的,它開始越來越像我必須單獨做它們,然後單擊textview以對複選框也起作用。 – AndroidP 2015-01-31 18:53:02

回答

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

onClick for checkBox偵聽器未觸發.... – 2015-11-02 07:18:22