Имеется у меня кастомный ListView, каждый элемент которого состоит из EditText и кнопки
Есть кастомный же ArrayAdapter, связанный с данным ListView, и ArrayList<EditText>:
private ArrayList<EditText> m_edit = null;
private EditAdapter m_adapter;
private class EditAdapter extends ArrayAdapter<EditText>
При добавлении в ListView нового элемента, так же обновляю ArrayList таким образом: m_edit.add(et); (et — экземпляр EDitText)
Здесь все хорошо
Что хочу сделать:
1. Предоставить пользователю возможность вводить произвольные данные в EditText элементов ListView — с этим вроде бы проблем нет
2. Обновлять этими данными соответствующие элементы связанного ArrayList — вот здесь проблема. Совсем не понимаю как это сделать.
П. 2 нужен, чтобы потом все введенные данные из ListView сохранить в БД. Если есть способ, как этом можно сделать, не обращаясь к ArrayList — буду рад услышать совет
Здравствуйте, montalvo, Вы писали:
M>День добрый
M>Имеется у меня кастомный ListView, каждый элемент которого состоит из EditText и кнопки
M>Есть кастомный же ArrayAdapter, связанный с данным ListView, и ArrayList<EditText>: M>private ArrayList<EditText> m_edit = null; M>private EditAdapter m_adapter; M>private class EditAdapter extends ArrayAdapter<EditText>
M>При добавлении в ListView нового элемента, так же обновляю ArrayList таким образом: m_edit.add(et); (et — экземпляр EDitText)
M>Здесь все хорошо
M>Что хочу сделать: M>1. Предоставить пользователю возможность вводить произвольные данные в EditText элементов ListView — с этим вроде бы проблем нет M>2. Обновлять этими данными соответствующие элементы связанного ArrayList — вот здесь проблема. Совсем не понимаю как это сделать. M>П. 2 нужен, чтобы потом все введенные данные из ListView сохранить в БД. Если есть способ, как этом можно сделать, не обращаясь к ArrayList — буду рад услышать совет
M>Заранее спасибо за помощь
Честно говоря не очень понял задачу, не совсем понятно. Но могу предположить — каждый раз когда вы добавляете в список EditText вешайте ему ваш обрабочик куда передавайте id этого EditText или его самого ка ключ — при изменения текста сразу его обновляйте в кэше (просто хэшмапа в качестве ключа переданное значение) — потом когда нужно сохранить сразу пробегайтесь по хэмапе — получите только значения которые менялись. Если хотите чтобы были все — при добавлении иницилизируйте мапу.
Здравствуйте, Young, Вы писали: Y>Честно говоря не очень понял задачу, не совсем понятно. Но могу предположить — каждый раз когда вы добавляете в список EditText вешайте ему ваш обрабочик куда передавайте id этого EditText или его самого ка ключ — при изменения текста сразу его обновляйте в кэше (просто хэшмапа в качестве ключа переданное значение) — потом когда нужно сохранить сразу пробегайтесь по хэмапе — получите только значения которые менялись. Если хотите чтобы были все — при добавлении иницилизируйте мапу.
Y>Оно?
Спасибо за отклик.
HashMap скорее всего подойдет для хранения данных
Но, я все-таки попробую свою проблему немного переформулировать:
Я не знаю как сделать обработку события изменения текста в EditText, который является элементом ListView.
Т.е. как вариант — по нажатию какой-нить кнопки, можно пробежаться по всему ListView и просто скопировать из него значения EditText. Однако, хотелось бы без необходимости нажатия кнопки. вот
Здравствуйте, montalvo, Вы писали:
M>Но, я все-таки попробую свою проблему немного переформулировать: M>Я не знаю как сделать обработку события изменения текста в EditText, который является элементом ListView. M>Т.е. как вариант — по нажатию какой-нить кнопки, можно пробежаться по всему ListView и просто скопировать из него значения EditText. Однако, хотелось бы без необходимости нажатия кнопки. вот
et_name.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
Здравствуйте, Young, Вы писали:
Y>Здравствуйте, montalvo, Вы писали:
M>>Но, я все-таки попробую свою проблему немного переформулировать: M>>Я не знаю как сделать обработку события изменения текста в EditText, который является элементом ListView. M>>Т.е. как вариант — по нажатию какой-нить кнопки, можно пробежаться по всему ListView и просто скопировать из него значения EditText. Однако, хотелось бы без необходимости нажатия кнопки. вот
Y>
Y>et_name.addTextChangedListener(new TextWatcher() {
Y>public void afterTextChanged(Editable s) {}
Y>public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
Y>public void onTextChanged(CharSequence s, int start, int before, int count) {}
Y>});
Y>
Y>Оно?
ну вот мне как-то нужно сделать такой обработчик для EditText, который является частью элемента кастомного ListView.
Т.е. как повесить обработку события на обычный EditText — я понимаю, а вот как повесить обработку такого же события на EditText -член элемента ListView — уже проблема
В общем-то ответом на мой вопрос является использование TextWatcher и его методов
public void afterTextChanged(Editable Text)
public void beforeTextChanged(CharSequence s, int start, int count, int after)
public void onTextChanged(CharSequence s, int start, int before, int count)
Сам обработчик засунул в кастомный arrayAdapter, на который настроен мой кастомный ListView, в класс
public View getView(int position, View convertView, ViewGroup parent) следующим образом:
TextWatcher watcher = new categoryTextWatcher();
et.addTextChangedListener(watcher);
где et — тот самый EditText
Re[2]: [Android] Работы с кастомным ListView
От:
Аноним
Дата:
06.05.12 10:52
Оценка:
Здравствуйте, montalvo, Вы писали:
M>В общем-то ответом на мой вопрос является использование TextWatcher и его методов M> public void afterTextChanged(Editable Text) M> public void beforeTextChanged(CharSequence s, int start, int count, int after) M> public void onTextChanged(CharSequence s, int start, int before, int count)
M>Сам обработчик засунул в кастомный arrayAdapter, на который настроен мой кастомный ListView, в класс M>public View getView(int position, View convertView, ViewGroup parent) следующим образом:
M>TextWatcher watcher = new categoryTextWatcher(); M>et.addTextChangedListener(watcher);
M>где et — тот самый EditText
Не могли бы Вы привести код приложения? Меня интересует адаптер для EditText и подключение TextWatcher.
Столкнулся с аналогичной проблемой, но не могу подключить объект EditText к списку.