2015-11-24 69 views
0

我在列表中有一個「單元格」,其中包含圖片,文本和複選框。這裏是我的xml fragment_people_list_item.xml查找在RecyclerView中點擊(點擊)的視圖

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"> 
    // ... more elements 
    <CheckBox /> 
</RelativeLayout> 

我想,如果用戶點擊一個複選框或視圖的其餘部分區分開來。我RecyclerView.OnItemTouchListener的相關部分:

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

} 

它說,findChildViewUnder找到對應點,這一直是我RelativeLayout下最上面的觀點!

如何知道用戶點擊哪個視圖(點擊)?

+0

您應該使用自定義適配器來實現這樣的事情。 試試這個答案http://stackoverflow.com/a/13220810/783612。 – fastholf

+0

那麼我可以很容易地附加一個'OnClickListener'或'OnCheckedChangeListener'。問題是點擊複選框會做兩件事:1.自己勾選複選框; 2:進一步傳播給我的'onInterceptTouchEvent'監聽器 – dVaffection

+0

而在我的'onInterceptTouchEvent'監聽器中,我不想在我的複選框上調用setChecked,如果點擊它,反之亦然。是否有意義? – dVaffection

回答

0

要區分checkBox對點擊列表項的其餘部分的點擊,您應該爲列表使用自定義適配器並重寫getView。在getView方法中,您可以分別爲您的複選框和項目設置OnClickListener。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.list_item, parent, false); 
    } 
    CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.checkbox); 
    checkBox.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d("@@@", "checkbox clicked"); 
     } 
    }); 
    convertView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d("@@@", "item clicked"); 
     } 
    }); 
    return convertView; 
} 
+0

我當然使用自己的適配器,它從'RecyclerView.Adapter'擴展而來,它沒有一個方法'getView'來覆蓋。 – dVaffection

+0

對不起,在'ListView'的適配器中使用'getView'方法。在'RecyclerView'的適配器中,'onBindViewHolder'方法可能會應用同樣的事情。 – fastholf