2014-10-29 72 views
0

我的每個列表項目都有一個Star(風格複選框),用於使項目最喜歡,並且可以單擊項目本身(整行)來打開項目。帶有多個可點擊事件的ListView - 填充忽略意外點擊?

它的工作原理,但問題是稍微點擊明星導致主ListItem點擊事件觸發,我試圖通過填充/邊緣解決這個星形,但點擊該填充區域導致主要列表項目上單擊當用戶錯過星星上的水龍頭幾個像素時,導致物品被打開。

什麼是忽略列表項目上點擊的最好方法是向左邊的小邊距,完全在上面和下面以及明星的右邊?

(如何忽略下面的圖中的紅色區域的點擊?)

enter image description here

+0

一種解決方案可以用一點點紅色背景切割明星圖像,然後將圖像中的應用 – kgandroid 2014-10-29 05:15:01

回答

0

大量的調查之後,它似乎解決這個問題最簡單的方法是這樣的:

這添加到列表中的項目佈局的根元素:

android:descendantFocusability="blocksDescendants" 

這個添加到複選框的「星」 /父母,在我的情況的複選框一起住上一些填充一個的LinearLayout裏面,所以我加了這對我的LinearLayout:

android:clickable="true" 

這會導致我的CheckBox周圍的LinearLayout上的「Clicks」被它吞併,並且不會進入ListItem的其餘ListItem響應的ListItem OnClick事件。

我的列表項佈局整個代碼看起來是這樣的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" 
android:addStatesFromChildren="false" 
android:descendantFocusability="blocksDescendants" 
android:id="@+id/listitem" > 


<LinearLayout 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:layout_weight="1" 
    android:orientation="vertical" 
    android:gravity="center_vertical"> 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceListItemSmall" 
     android:gravity="center_vertical" 
     android:text="Item 1" 
     /> 

    </LinearLayout> 


    <LinearLayout 
     android:orientation="horizontal" 
     android:clickable="true" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="right"> 

     <Space 
      android:layout_width="15dp" 
      android:layout_height="match_parent"/> 

     <CheckBox 
       android:id="@+id/favouriteCheckBox" 
       android:button="@drawable/checkbox_selector" 
       android:layout_height="match_parent" 
       android:layout_width="wrap_content" 
       android:gravity="center" 
       android:layout_gravity="fill" 
       android:visibility="visible" /> 
     <Space 
      android:layout_width="15dp" 
      android:layout_height="match_parent"/> 

    </LinearLayout> 

</LinearLayout> 
0

到目前爲止,我認爲填充是最好的解決辦法。給你最喜歡的按鈕提供足夠的填充。但是如果你說你已經這樣做了,那麼另一種選擇是不使用ListView onItemClickListener,併爲行項目使用單獨的onClickListener。例如,您可以修改ListView項目行佈局,方法是給子項加權(一個視圖打開項目詳細信息,另一個視爲您最喜歡的按鈕),並將單獨的onClickListener應用於兩者。每個

+0

填充不工作! – lahsrah 2014-10-29 05:12:13

+0

所以你可以使用我已經發布的第二個選項 – 2014-10-29 05:13:05

0

添加標籤查看您需要在添加動作,然後使用view.gettag(),並在標籤上

切換