Ich habe eine erweiterbare Liste, die Einstellungen in meinem Programm darstellt. Die Gruppenansicht verfügt über eine TextView-Beschreibung mit einem Button, der ein Zurücksetzen darstellt. Die untergeordnete Ansicht hat eine TextView-Beschreibung mit einem EditText, der eine individuelle Einstellung darstellt.Legen Sie Werte von Komponenten aller untergeordneten Ansichten in der erweiterbaren Liste fest
Die Werte der EditText werden in externen Variablen und aktualisiert bei jeder Änderung gespeichert. Mit einem Klick auf die Reset-Schaltfläche in der Gruppenansicht möchte ich alle in den EditTexts enthaltenen individuellen Einstellungen auf die Standardwerte zurücksetzen. Dies funktioniert, aber natürlich werden die EditTexts-Ansichten erst aktualisiert, wenn die untergeordneten Ansichten neu gezeichnet werden. Ich möchte, dass sich die Ansichten sofort ändern, wenn Sie auf den Reset-Knopf klicken.
Ich habe eine Vielzahl von Dingen versucht, aber immer wieder in Probleme zu laufen. Ich kann anscheinend nicht auf die EditText-Ansichten innerhalb des Reset-Button-Listeners zugreifen, um den Text programmgesteuert festzulegen.
Meine erweiterbare Liste (gekürzt):
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;
}
Die Codezeile:
etIndividualLetterValues[i].setText(String.format("%d", Settings.settingsDefault[C.INDIVIDUAL_LETTER_VALUES][i]));
gibt einen NPE.