Пробовал делать это на базе SimpleAdapter. Задал свой шаблон для элемента списка.
В результате: шаблон отображается в списке правильно, но при попытке ввода чего-нибудь в EditText, весь список перерисовывается.
Пробовал делать свой адаптер (наследник от SimpleAdapter), но тут проявились какие-то проблемы с курсором.
При вводе текста курсор постоянно в самом левом положении.
Чего-то мне кажется, что SimpleAdapter не ориентирован на работу с элементами редактирования.
Подскажите, я вообще на правильном пути?
Может надо другой адаптер использовать?
Вот код:
Код: Выделить всё
public class CommonDataAdapter extends SimpleAdapter {
public static final String BEACON_PARAM_LABEL = "beacon_param_name";
public static final String BEACON_PARAM_VALUE = "beacon_param_value";
public static final String BEACON_PARAM_HINT = "beacon_param_hint";
private Context m_context;
private final LayoutInflater m_inflater;
private List<? extends Map<String, ?>> m_data;
private int m_resource;
//private static final int param_layout = R.layout.beacon_param;
public CommonDataAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
m_context = context;
m_inflater = LayoutInflater.from(m_context);
m_data = data;
m_resource = resource;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view==null) {
view = m_inflater.inflate(m_resource, parent, false);
}
if (!m_data.get(position).equals(null)) {
final EditText param_value_editor = (EditText)view.findViewById(R.id.param_value);
param_value_editor.setTag(position);
String val = m_data.get(position).get(BEACON_PARAM_VALUE).toString();
param_value_editor.setText(val);
String hint = m_data.get(position).get(BEACON_PARAM_HINT).toString();
param_value_editor.setHint(hint);
param_value_editor.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Map<String, String> m = (Map<String, String>)m_data.get(position);
if (!m.equals(null)) {
String dta = s.toString();
if (!m.get(BEACON_PARAM_VALUE).toString().equals(dta)) {
((Map<String, String>)m_data.get(position)).put(BEACON_PARAM_VALUE, dta);
if (!param_value_editor.getText().equals(dta)) {
param_value_editor.setText(dta);
//param_value_editor.moveCursorToVisibleOffset();
}
}
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
} else {
return null;
}
return view;
}
}