カスタムアダプタを備えたリストビューがあります。各行の左側にはテキストビューがあり、右側にはユーザーがエントリ値を変更するために使用できるエディットテキストがあります。
デフォルトで各ビュー内のEditTextビューに配置される値は、アダプターに渡された文字列配列から取得されます。
ユーザーがこれらの値を編集して、結果を同じ文字列配列に保存できるようにするにはどうすればよいのでしょうか。
テキスト変更リスナーを追加してみたので、ユーザーが値を編集すると、新しい文字列が元の文字列配列の適切な位置に配置されます。これに伴う問題は、ユーザーがスクロールすると、テキスト変更リスナーがアクティブになり、配列の値が空白の文字列で上書きされることです。
ここにいくつかのコードがあります:
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;
}
変数objectValuesの値の一部が文字列「null」として設定されるため、いくつかのedittext値を空白にif(rowItem[1].equals("null")) {
設定しましたが、空白で表示したいと思います。
これが理にかなっていることを願っています。誰かが私がこれを達成する方法を知っていますか?
ありがとう