Бизнес-логика прослушивателя CheckBox внутри ListView

#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. Это мой вопрос, как я мог бы разместить его вне пользовательского адаптера? И для нужд моего приложения ему необходимо выполнять логику при каждом нажатии на флажок.