J'ai un listview qui a un adaptateur personnalisé où chaque ligne a une vue de texte sur la gauche et un edittext sur la droite de celui-ci que l'utilisateur peut utiliser pour modifier une valeur d'entrée.Modifier dynamiquement les données dans l'adaptateur ListView
Les valeurs qui sont placées dans les vues EditText dans chaque vue par défaut sont obtenues à partir d'un tableau String transmis à l'adaptateur.
Je me demande comment je peux permettre à l'utilisateur de modifier ces valeurs et sauvegarder les résultats dans le même tableau de chaînes.
J'ai essayé d'ajouter un écouteur de modification de texte, de sorte que lorsque l'utilisateur modifie la valeur, la nouvelle chaîne est placée à la position appropriée dans le tableau de chaînes d'origine. Le problème avec ceci est que lorsque l'utilisateur fait défiler l'écouteur de changement de texte est activé et la valeur dans le tableau est remplacée par une chaîne vide.
Voici un code:
public EditTagsListViewAdapter(Context context, String[] objectKeys, String[] objectValues) {
super();
this.context = context;
this.objectKeys = objectKeys;
this.objectValues = objectValues;
}
@Override
public int getCount() {
return objectKeys.length;
}
@Override
public String[] getItem(int position) {
String[] item = new String[2];
item[0] = objectKeys[position];
item[1] = objectValues[position];
return item;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.edit_osm_tag_row, null);
holder = new ViewHolder();
holder.key = (TextView) convertView.findViewById(R.id.tagKey);
holder.value = (EditText) convertView.findViewById(R.id.tagValue);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
String[] rowItem = (String[]) getItem(position);
holder.key.setText(rowItem[0]);
if(rowItem[1].equals("null")) {
holder.value.setText("");
} else {
holder.value.setText(rowItem[1]);
}
holder.value.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
objectValues[position] = s.toString();
Log.i(TAG, "Added changes to adapter");
}
});
return convertView;
}
static class ViewHolder {
protected TextView key;
protected EditText value;
}
Je mis quelques valeurs EditText à vide après la if(rowItem[1].equals("null")) {
parce que certaines des valeurs dans les objectValues variables sera définie comme la chaîne « null » mais je veux qu'ils apparaissent blanc.
Espérons que cela a du sens. Est-ce que quelqu'un sait comment je peux y parvenir?
Merci