Utilisez une API pour remplir un questionnaire App dans android. Suis en utilisant listview extensible, basé sur l'API, j'obtiens une catégorie de questions (Parent) et des questions (enfant). La question (enfant) peut changer selon le type de question (Type d'objectif: Radiobutton, oui ou non, Type de texte: Modifier le texte).Android ListView extensible avec bouton radio
J'ai statiquement créé un format XML personnalisé et gonfle cette disposition dans la méthode getChildView ou la listview extensible. Mais quand je développe/réduis l'affichage de la liste extensible, toutes les sélections de bouton radio vont mal. par exemple: si je réponds pour un enfant de 1ère catégorie, il sera également répondu pour une autre catégorie.
Veuillez me trouver une solution pour cela. Dois-je créer dynamiquement le bouton radio/groupe radio ou c'est suffisant. Basé sur la questionType je cache/affiche les widgets. Veuillez trouver le code ci-dessous.
Ma valeur HashMap est comme:
HashMap<String, ArrayList<QListModel>> expandableListDetail = new HashMap<>();
ArrayList Contient: Question, questiontype, QuestionID etc
Voici mon code: ma classe Adaptateur
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context context;
private List<String> expandableListTitle;
private HashMap<String, ArrayList<QListModel>> expandableListDetail;
public ExpandableListAdapter(Context context, List<String> expandableListTitle, HashMap<String,
ArrayList<QListModel>> expandableListDetail) {
this.context = context;
this.expandableListTitle = expandableListTitle;
this.expandableListDetail = expandableListDetail;
}
@Override
public int getGroupCount() {
return this.expandableListTitle.size();
}
@Override
public int getChildrenCount(int listPosition) {
// return this.expandableListDetail.get(this.expandableListTitle.get(listPosition))
// .size();
Log.e("VCVCV",String.valueOf(this.expandableListDetail.get(this.expandableListTitle.get(listPosition)).size()));
return this.expandableListDetail.get(this.expandableListTitle.get(listPosition))
.size();
}
@Override
public Object getGroup(int listPosition) {
return this.expandableListTitle.get(listPosition);
}
@Override
public Object getChild(int listPosition, int expandedListPosition) {
return this.expandableListDetail.get(this.expandableListTitle.get(listPosition))
.get(expandedListPosition);
}
@Override
public long getGroupId(int listPosition) {
return listPosition;
}
@Override
public long getChildId(int listPosition, int expandedListPosition) {
return expandedListPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int listPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
String listTitle = (String) getGroup(listPosition);
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) this.context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.expand_parent, null);
}
TextView listTitleTextView = (TextView) convertView
.findViewById(R.id.groupText);
listTitleTextView.setText(listTitle);
return convertView;
}
@Override
public View getChildView(int listPosition, final int expandedListPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
QListModel expandedListText = (QListModel) getChild(listPosition, expandedListPosition);
Log.e("ChildQuestions",expandedListText.getqList());
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.expand_child_selection, null);
}
TextView expandedListTextView = (TextView) convertView.findViewById(R.id.childText);
EditText expandedListEditText = (EditText) convertView.findViewById(R.id.editTextAdditional);
expandedListTextView.setText(expandedListText.getqList());
RadioGroup rgp = (RadioGroup) convertView.findViewById(R.id.radioGroup);
//NotUsing
RadioButton radioYes=(RadioButton) convertView.findViewById(R.id.radioYes);
RadioButton radioNo=(RadioButton) convertView.findViewById(R.id.radioNo);
if (expandedListText.getqType().equals("Y/N")){
rgp.setVisibility(View.VISIBLE);
expandedListEditText.setVisibility(View.GONE);
}
else {
expandedListEditText.setVisibility(View.VISIBLE);
rgp.setVisibility(View.GONE);
}
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
Ma mise en page
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:paddingLeft="20dp"
android:layout_marginRight="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/childText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:textColor="@color/colorBlackLight"
android:text=""/>
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radioYes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/colorBlackLight"
android:text="Yes"/>
<RadioButton
android:id="@+id/radioNo"
android:layout_marginLeft="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/colorBlackLight"
android:text="No"/>
</RadioGroup>
<EditText
android:id="@+id/editTextAdditional"
android:layout_width="match_parent"
android:padding="5dp"
android:textColor="@color/colorBlackLight"
android:layout_marginBottom="10dp"
android:layout_marginRight="20dp"
android:background="@color/colorFrameBLueLight"
android:textSize="12sp"
android:layout_height="wrap_content" />
</LinearLayout>
Problème: Si je sélectionne une première catégorie dans tous les éléments de la catégorie, dois-je gérer dynamiquement le bouton radio et le groupe radio? Si oui, dans quelle méthode je dois le faire. Si je les crée dans getChildView, il sera appelé chaque fois que j'élargis une catégorie. La sélection précédente ne sera donc pas mémorisée. S'il vous plaît, obtenez-moi une solution. Merci d'avance.
Utilisez viewholder ou recyclerview , cela arrive parce que la vue est réutilisée, donc le même objet est récupéré, utilisez un sparseintarray pour garder trace de la sélection de l'utilisateur –