#android
#Android
Вопрос:
Я реализовал пользовательский адаптер для моего ListView, который включает флажок в каждой строке.
Поскольку у меня есть прослушиватель щелчков в моем пользовательском адаптере, я вынужден реализовать там свою бизнес-логику (то есть то, что происходит при нажатии флажка … доступе к базе данных и т.д.).
Это правильно? Не было бы лучшей практикой реализовать эту бизнес-логику вне пользовательского адаптера? (Я думаю, что адаптер должен заботиться только о визуализации).
Ответ №1:
Попробуйте это .. надеюсь, это поможет вам
lv_Archiveist.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
if(view.findViewById(R.id.chkbox).isChecked())
{
//your method//
//you can also get the position of your selected checkbox by the parameter "position"
}
Комментарии:
1. Но «ваш метод» — это метод внутри пользовательского адаптера, не так ли? Это должно быть вне пользовательского адаптера.
2. Он находится в классе activity, а lv_Archiveist — это ListView
3. В моем вопросе я имел в виду пользовательский адаптер списка (который расширяет ArrayAdapter), а бизнес-логика, которую я реализовал, находится внутри метода getView. Итак, мой вопрос в том, могу ли я разместить его вне пользовательского адаптера? Как? и как я мог бы это назвать?
4. да, в моем коде у меня есть пользовательский адаптер, который расширяет BaseAdapter. Я объявил в нем флажок. У меня также есть textview. Мы можем получить доступ к этим элементам управления в классе Activity, в котором мы используем ListView. Доступ к адаптеру можно получить из ListView с помощью опубликованного метода above..So , вы также можете разместить бизнес-логику вне класса адаптера. вы могли бы указать, какой флажок установлен, с помощью onCheckchangeListener и получить доступ к соответствующему текстовому полю или любым другим данным элемента управления, используя параметр «позиция».пожалуйста, отправьте любой запрос, я постараюсь опубликовать свою программу, если это возможно .. надеюсь, это поможет 🙂
5. О, опубликовать какой-нибудь код было бы очень интересно 🙂 Работает ли это каждый раз, когда устанавливается флажок?
Ответ №2:
Я бы только отметил элемент при CheckBox
нажатии и выполнил всю логику при другом нажатии кнопки, которое было бы за пределами ListView
(аналогично тому, как iPhone обрабатывает редактирование таблицы). Я не могу вспомнить ситуацию, когда CheckBox
используется для выполнения какого-либо действия самостоятельно.
Комментарии:
1. Проблема в том, как я могу вызвать какой-либо метод вне моего адаптера списка?
2. Это проблема? Определите этот общедоступный метод в классе вашего адаптера, и вы сможете вызывать его для объекта вашего адаптера, например, получая его из ListView
((YourCustomAdapter)listView.getAdapter()).doSomethingWithCheckedItems();
3. Хорошо, это было бы для того, чтобы сделать что-то со всеми отмеченными элементами оптом. Но как бы вы делали это каждый раз, когда проверяется один элемент?
4. Как я уже сказал, я бы не стал выполнять логику при каждой проверке элемента, я бы только пометил элемент как отмеченный / непроверенный. Эта логика будет находиться в адаптере, но бизнес-логика будет находиться за его пределами.
5. Это мой вопрос, как я мог бы разместить его вне пользовательского адаптера? И для нужд моего приложения ему необходимо выполнять логику при каждом нажатии на флажок.