2014-02-13 4 views
5

Wie kann ich die "Klicks" auf die Listeneintragszeile # 1 mit Klicks auf Radiobutton innerhalb der Zeile # 2 verknüpfen.ListView item link Klicken Sie auf den Status der Zeile mit der Schaltfläche im Listenelement

Im Moment ist es: Klicken auf die Zeile zeigt den "Fokus" Hilight, aber wird nicht die Radiobutton-Auswahl auslösen, klicken Sie auf den RB wird "überprüfen" Radiobutton, wird aber nicht "Hilight" -Effekt geben.

Aber ich möchte es als eins arbeiten: "Klicken auf Zeile zeigt Fokus und tun Auswahl auf RB und klickt auf RB wird Radiobutton und Hiligh Zeile überprüfen".

Gibt es einen Weg, dies zu erreichen? Mit diesem Setup könnte ich die Zeile einfach ändern, so dass es ein Radiobutton ohne Radiobutton ist.

Ich habe einen benutzerdefinierten ArrayAdapter, um Radioknopf-Klicks zu handhaben (und "Gruppen" von Radiobuttons zu behandeln).

Schuss # 1

list item selected

Schuss # 2

list item radiobutton selected

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

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

Was ich vorübergehend ist tat: habe ich die klickbare des RadioButton- auf false gesetzt. In ArrayAdapter, anstatt auf RB ich ClickListener in der Zeilenansicht (basierend auf Ansichtstyp).

+0

Es tut mir leid, ich habe keine klare Vorstellung davon, was Sie tun möchten. Könntest du es bitte etwas mehr erklären? Wofür steht RB und für zwei Screenshots von Listen, sind das gleiche oder zwei separate Listen? Was ist die Beziehung, die Sie zwischen Zeilen in zwei Listen benötigen? –

+0

RB - ist die Abkürzung für ** R ** adio ** B ** utton. 2 Screenshots zeigt die gleiche Liste (enthält verschiedene Arten von Zeilen). Und zeigt Ergebnisse des Klickens in verschiedenen Teilen der RB-Reihe. Der erste zeigt eine hervorgehobene Reihe, aber nicht den ausgewählten RB, der zweite zeigt einen ausgewählten RB, aber keine Reihe hilight. –

Antwort

1

Warum nicht einfach das RadioButton in der OnItemClicklistener der ListView und umgekehrt programmgesteuert?

zum Beispiel So

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; 

     } 
}); 

Dann ähnlich setSelected(true) auf View aufrufen, die die RadioButton im OnCheckedChangeListener in Ihrer onCheckedChanged Umsetzung des RadioGroup enthält.

+0

Kennen Sie andere Routen? Mit diesem muss ich onItemClick auf jedem ListView mit diesen Zeilenlayouts machen und muss wissen, um Auswahlmethoden aufzurufen. Außerdem muss ich Code hinzufügen, um das Hintergrund-Objekt vom Click-Listener von Radiobutton zu erstellen. Ich möchte etwas eigenständiges. –

+0

Ich bin mir nicht sicher, wie es sonst noch geht, sorry - so etwas musste ich noch nie machen, also bin ich mir nicht sicher, was der beste Weg wäre. Ich weiß, dass dies eine lange zu implementierende Lösung sein kann; Hoffentlich findet jemand etwas Besseres. – ujvl

1

Sie sollten eine Zeile als Optionsfeld verwenden, anstatt selbst ein benutzerdefiniertes Funkelement zu erstellen. Dann werden die Events direkt an den Radiobutton übergeben.

Siehe Details: http://rudisss.blogspot.in/2012/10/listview-with-radio-buttons-and.html

+0

In Frage habe ich erwähnt, dass es keine Lösung ist, d. H. Ich könnte mehr als Radio-Button drin haben. oder mein Entwurf erfordert diesen zusätzlichen "Behälter", z. für Margen, die sonst auf RB angewendet würden. –

3

Der beste Weg, dies zu tun ist CheckedTextView in Ihrem row.xml zu verwenden. Standardmäßig stellt Android das Verhalten bereit, das Sie im Layout android.R.layout.simple_list_item_single_choice angeben. Aber der Radio-Button wird rechtsbündig sein. Wenn Sie möchten, dass die Optionsschaltfläche links ausgerichtet ist, müssen Sie simple_list_item_single_choice i anpassen.e

<?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" 
/> 

diesen

<?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" /> 

müssen Sie nur den listChoiceIndicator nach links neu positionieren, indem sie auf der linken Seite Zeichnung anstelle des Standard richtig zu machen. In ähnlicher Weise können Sie das Mehrfachauswahlelement für dasselbe Verhalten anpassen.

+0

Setzen Sie den Code hier, so dass Benutzer darauf verweisen können, auch wenn der Link nicht mehr verfügbar ist. –

1

In Ihrem aktuellen Design können wir diese Anforderung einfach mit einem RadioButton implementieren. Um dies zu erreichen, entfernen Sie einfach das RelativeLayout außerhalb des Radiobutton im Zeilenlayout und machen RadioButon zum übergeordneten Element des Zeilenlayouts. Und schreiben Sie einen benutzerdefinierten Selektor für den RadioButton. Es wird dein Problem lösen.

+0

Beispiele für den benutzerdefinierten Selektor für den RadioButton? Das Einstellen von RadioButton als Zeile ist keine Lösung, da ich die Ränder nicht richtig anwenden kann (es bewegt nicht das Radiobuttonsymbol, sondern vergrößert den Abstand zwischen dem rb-Symbol und dem Text) –

+0

Wenn Sie an Custom RadioButton interessiert sind, können Sie das tun. – Krish

Verwandte Themen