2017-12-14 3 views
1

Hallo Alles Ich habe eine erweiterbare Listenansicht in meiner Anwendung, wo ich Radio Button in der Kindansicht dynamisch im Adapter generieren. Ich habe eine Anforderung an die setOnChildClickListener in der erweiterbaren Listenansicht. Leider wird es wegen der Radioknöpfe nicht ausgelöst. Ich habe versucht, setFocusable/setclickable im dynamisch generierten Optionsfeld auf false gesetzt werden. wenn ich das tue, wird die setOnChildClickListener gefeuert. Aber ich kann einzelne Radio-Buttons nicht auswählen. Also hat keiner geholfen. Kann mir bitte jemand dabei helfen? Bitte beachten Sie meine Adapter Klassenmethode,setOnChildClickListener nicht für ExpandableListView ausgelöst

Das ist mein Adapter Methode

@Override 
public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
    LayoutInflater infalInflater = (LayoutInflater) this.context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    convertView = infalInflater.inflate(R.layout.expandable_child_radio_layout, null); 


    RadioGroup radioGroup = (RadioGroup) convertView.findViewById(R.id.radio_group1); 
    radioGroup.setFocusable(false); 
    final RadioButton[] rb = new RadioButton[listDataChild.get(this.listOptionsHeader.get(groupPosition)).size()]; 
    radioGroup.setOrientation(RadioGroup.VERTICAL); 
    for (int i = 0; i < listDataChild.get(this.listOptionsHeader.get(groupPosition)).size(); i++) { 
     rb[i] = new RadioButton(context); 
     rb[0].setChecked(true); 
     final String childText = (String) getChild(groupPosition, i); 
     rb[i].setText(childText); 
     rb[i].setId(i + 100); 
     rb[i].setTag("radio-child " + childText); 
     fontUtils.changeFontOfRadioButtontoOpenSansRegular(rb[i]); 
     rb[i].setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.letter_small)); 
     radioGroup.addView(rb[i]); 
     rb[i].setFocusable(false); 
    } 
    return convertView; 
} 

Dieses Layout mein Kind ist XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="left" 
    android:layoutDirection="ltr" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:paddingLeft="20dp"> 

     <RadioGroup 
      android:id="@+id/radio_group1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

     </RadioGroup> 

    </LinearLayout> 

</LinearLayout> 

Dies ist die onClick Methode, die ich in meiner Haupttätigkeit Klasse verwendet haben .

+0

ich denke, hinzufügen können Sie Hörer für childview 'mExpandableListView.setOnChildClickListener anzuwenden vergessen (diese); ' –

+0

Wenn es nicht ausgelöst wird post Code mit dem Listener vielleicht tun Sie es falsch und das Problem ist nicht mit Schaltflächen, und auch die Dokumente beschränken die Verwendung von Höhe wrap_content für ExListView und es ist das übergeordnete Layout zur gleichen Zeit, sollten Sie angeben die Höhe in xml Layout – Rainmaker

+0

@HarshadPrajapati ich hav e hat tatsächlich den Listener in meiner Hauptaktivitätsklasse verwendet. – DRayen

Antwort

1

Setzen Sie Return-Anweisung zu Ihrem Listener als wahr, nicht falsch und stellen Sie sicher, dass Sie es einstellen, nachdem Sie Ihren Adapter festgelegt haben!

EDIT:

Wie Sie die rbuttons auswählen kann nicht, aber Ihr OnClick wird gefeuert die Auswahl manuell auf die Schaltfläche geklickt

RadioGroup radioGroup = (RadioGroup) convertView.findViewById(R.id.radio_group1); 
radioGroup.setFocusable(false); 
final RadioButton[] rb = new RadioButton[listDataChild.get(this.listOptionsHeader.get(groupPosition)).size()]; 
radioGroup.setOrientation(RadioGroup.VERTICAL); 
for (int i = 0; i < listDataChild.get(this.listOptionsHeader.get(groupPosition)).size(); i++) { 
    rb[i] = new RadioButton(context); 
    // rb[0].setChecked(true); 
    final String childText = (String) getChild(groupPosition, i); 
    rb[i].setText(childText); 
    rb[i].setId(i + 100); 
    rb[i].setTag("radio-child " + childText); 
    fontUtils.changeFontOfRadioButtontoOpenSansRegular(rb[i]); 
    rb[i].setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.letter_small)); 
    radioGroup.addView(rb[i]); 
    rb[i].setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      radioGroup.check(rb[i].getId()); 
     //if you allow multiple checked btns then leave it like that or if you don't then you need to check if there are other buttons checked in radioGroup and then unckeck them also in this method 
     }); 
    rb[i].setFocusable(false); 
+0

Ich änderte es zu wahr. Aber immer noch bekomme ich die Print-Anweisung nicht. – DRayen

+0

Ich habe festgestellt, dass Ihre Ansichten auf focusable = false und clickable = false gesetzt sind. ändere es auf "True", da du keine Klicks knacken kannst – Rainmaker

+0

Wenn ich diese Werte auf "false" setze, wird 'setOnChildClickListener' ausgelöst, aber ich kann keine einzelnen Optionsfelder auswählen. Wenn ich es auf "True" ändere, kann ich einzelne Optionsfelder auswählen, aber "setOnChildClickListener" wird nicht ausgelöst. – DRayen

Verwandte Themen