2014-02-13 73 views
5

如何鏈接列表項目行#1上的「點擊」和行#2中單選按鈕的點擊。ListView項目鏈接單擊按鈕內部列表項目的行狀態

目前它是:點擊行將顯示「焦點」高亮,但不會觸發單選按鈕選擇,點擊RB將「檢查」單選按鈕,但不會給「高光」效果。

但是我希望它能夠作爲一個工作:「點擊行將顯示焦點並在RB上做選擇,點擊RB將檢查單選按鈕和Hilight行。

有沒有辦法做到這一點?有了這個設置,我想我可以改變這個行,所以它是一個不包含單選按鈕的單選按鈕。

我有一個自定義ArrayAdapter來處理單選按鈕(並處理單選按鈕的「組」)。

注射#1

list item selected

注射#2

list item radiobutton selected

列表視圖XML

<ListView 
    android:id="@+id/lv_radiolist" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:divider="@null" 
    android:dividerHeight="0dp" 
    tools:listitem="@layout/radiobutton_list_item" > 
</ListView> 

行XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" 
android:paddingLeft="@dimen/filterlist_sub_header_pad_left" 
android:paddingRight="@dimen/filterlist_sub_header_pad_right" > 

<RadioButton 
    android:id="@+id/rb_option" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:checked="true" 
    android:focusable="false" 
    android:text="Not marked favourite" /> 
</RelativeLayout> 

我做什麼暫時是: 我的單選按鈕的點擊設置爲false。 在ArrayAdapter中,而是在RB上,我在行視圖上設置了clickListener(基於視圖類型)。

+0

對不起,我不清楚你想做什麼。你能解釋一下嗎?什麼是RB代表和大約兩個屏幕截圖的列表,它們是相同的還是兩個單獨的列表?兩個列表中的行之間需要什麼樣的關係。 –

+0

RB - 是** R ** adio ** B ** utton的縮寫。 2屏幕截圖顯示了相同的列表(包含不同類型的行)。並顯示在RB行的不同部分點擊的結果。首先顯示高亮行但未選擇RB,第二顯示選擇RB但不行高亮。 –

回答

1

爲什麼不簡單地以編程方式檢查ListViewOnItemClicklistener中的RadioButton,反之亦然?

因此,例如,

listView.setOnItemClickListener(new OnItemClickListener() { 

    public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 

       // set the RadioButton of the corresponding 
      // view that was clicked by invoking setChecked(true) 
      // on that RadioButton; 

     } 
}); 

然後,類似呼籲你ViewsetSelected(true)包含OnCheckedChangeListenerRadioButtononCheckedChanged實施RadioGroup的。

+0

你知道其他路線嗎?有了這個,我必須使用此行佈局在每個ListView上進行onItemClick,並且需要知道調用選擇方法。另外,我必須添加代碼來完成radiobutton的click監聽器對後臺項目的高亮度。我想要一些獨立的東西。 –

+0

不知道還有什麼可以做的,對不起 - 我從來沒有做過這樣的事情,所以我不知道什麼是最好的方式。我意識到這可能是一個很長的解決方案;希望有人會找到更好的東西。 – ujvl

1

您應該使用一行作爲單選按鈕,而不是自己創建自定義無線電元素。然後事件將直接傳遞給單選按鈕。

請參閱有關詳情:http://rudisss.blogspot.in/2012/10/listview-with-radio-buttons-and.html

+0

有問題,我已經提到,這不是一個解決方案,即我可以有更多的單選按鈕。或者我的設計需要這個額外的「容器」,例如對於否則將用於RB的利潤。 –

3

做到這一點,最好的方法是在你的row.xml使用CheckedTextView。默認情況下,android提供了您在佈局android.R.layout.simple_list_item_single_choice中詢問的行爲。但單選按鈕將右對齊。如果你想單選按鈕左對齊,你將不得不自定義simple_list_item_single_choice我。Ë

<?xml version="1.0" encoding="utf-8"?> 
<!-- Copyright (C) 2008 The Android Open Source Project 

Licensed under the Apache License, Version 2.0 (the "License"); 
you may not use this file except in compliance with the License. 
You may obtain a copy of the License at 

     http://www.apache.org/licenses/LICENSE-2.0 

Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an "AS IS" BASIS, 
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
See the License for the specific language governing permissions and 
limitations under the License.--> 

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:gravity="center_vertical" 
    android:checkMark="?android:attr/listChoiceIndicatorSingle" 
    android:paddingLeft="6dip" 
    android:paddingRight="6dip" 
/> 

這個

<?xml version="1.0" encoding="utf-8"?> 
<!-- Copyright (C) 2008 The Android Open Source Project 

    Licensed under the Apache License, Version 2.0 (the "License"); 
    you may not use this file except in compliance with the License. 
    You may obtain a copy of the License at 

      http://www.apache.org/licenses/LICENSE-2.0 

    Unless required by applicable law or agreed to in writing, software 
    distributed under the License is distributed on an "AS IS" BASIS, 
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    See the License for the specific language governing permissions and 
    limitations under the License. 
--> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:drawableLeft="?android:attr/listChoiceIndicatorSingle" 
    android:gravity="center_vertical" 
    android:paddingLeft="6dip" 
    android:paddingRight="6dip" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

你需要通過使繪製它的左側,而不是默認的權利,只是重新定位listChoiceIndicator向左。同樣,您可以調整多個Choice項目以獲得相同的行爲。

+0

將代碼放在這裏,以便用戶可以參考它,即使鏈接不可用 –

1

至於你現在的設計,我們可以簡單地用RadioButton來實現這個要求。爲了實現這一點,只需在行佈局中刪除Radiobutton外部的RelativeLayout,並將RadioButon作爲行佈局的父級。併爲RadioButton寫一個自定義的選擇器。它會解決你的問題。

+0

RadioButton的自定義選擇器的任何示例?將RadioButton設置爲行不是解決方案,因爲我無法正確應用邊距(它不移動單選按鈕圖標,但增加了rb圖標和文本之間的空間) –

+0

如果您對Custom RadioButton感興趣,那麼您可以爲此做好準備。 – Krish

相關問題