J'ai une liste extensible qui représente les paramètres de mon programme. La vue de groupe a une description TextView avec un bouton qui représente une réinitialisation. La vue enfant a une description TextView avec un EditText qui représente un paramètre individuel.Définir les valeurs des composants de toutes les vues enfant dans la liste extensible
Les valeurs du EditText sont enregistrées dans des variables externes et mises à jour lors de tout changement. Après avoir cliqué sur le bouton de réinitialisation dans la vue de groupe, je souhaite réinitialiser tous les paramètres individuels contenus dans les EditTexts aux valeurs par défaut. Cela fonctionne mais, bien sûr, les vues EditTexts ne sont pas mises à jour tant que les vues enfant ne sont pas redessinées. Je veux que les vues changent immédiatement après un clic sur le bouton de réinitialisation. J'ai essayé une myriade de choses, mais je continue de rencontrer des problèmes. Je n'arrive pas à accéder aux vues EditText dans l'écouteur de bouton de réinitialisation pour définir le texte par programmation.
Ma liste Extensible (abrégée):
public class ExpandableListAdapter extends BaseExpandableListAdapter
{
private String[] listGroups;
private String[][] listChilds;
private Activity context;
final EditText[] etIndividualLetterValues = new EditText[26];
public ExpandableListAdapter(Activity context, String[] listGroups, String[][] listChilds)
{
this.context = context;
this.listGroups = listGroups;
this.listChilds = listChilds;
@Override
public View getChildView(final int listGroupPosition, final int listChildPosition, boolean isLastChild,
View view, ViewGroup viewGroup)
{
LayoutInflater inflater = context.getLayoutInflater();
TextView tvListItemGeneral;
tvListItemGeneral = (TextView) view.findViewById(R.id.TV_list_item_general);
tvListItemGeneral.setText(getChild(listGroupPosition, listChildPosition).toString());
etIndividualLetterValues[listChildPosition] = (EditText) view.findViewById(R.id.ET_list_item_settings_value);
etIndividualLetterValues[listChildPosition].setText(String.format("%d", Settings.settingsCurrent[listGroupPosition][listChildPosition]));
etIndividualLetterValues[listChildPosition].addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
Settings.settingsCurrent[listGroupPosition][listChildPosition] = Integer.parseInt(s.toString());
}
@Override
public void afterTextChanged(Editable s)
{
}
});
}
@Override
public View getGroupView(final int listGroupPosition, boolean isExpanded, View view, ViewGroup viewGroup)
{
LayoutInflater layoutInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(view == null)
{
view = layoutInflater.inflate(R.layout.list_group, viewGroup, false);
}
TextView tvListGroup = (TextView) view.findViewById(R.id.TV_list_group);
Button buttonSettingsReset = (Button) view.findViewById(R.id.B_settings_reset);
buttonSettingsReset.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if(listGroupPosition == C.INDIVIDUAL_LETTER_VALUES)
{
for(int i=0; i<26; i++)
{
etIndividualLetterValues[i].setText(String.format("%d", Settings.settingsDefault[C.INDIVIDUAL_LETTER_VALUES][i]));
}
}
}
});
tvListGroup.setText(getGroup(listGroupPosition).toString());
return view;
}
La ligne de code:
etIndividualLetterValues[i].setText(String.format("%d", Settings.settingsDefault[C.INDIVIDUAL_LETTER_VALUES][i]));
donne un NPE.