Редактирование списка Edittext

#java #android #arraylist #android-edittext #barcode-scanner

#java #Android #arraylist #android-edittext #сканер штрих-кода

Вопрос:

В моем приложении есть большое поле EditText, которое содержит штрих-коды, разделенные символом » n». Штрих-коды могут быть добавлены в это поле EditText либо программно (в onActivityResult, возвращающемся после операции сканирования), либо вручную.

Случайный пример:

 010566510415
40541651654556
561516551588
0043211652
003789453
  

Мне нужно, чтобы каждый из этих штрих-кодов сохранялся локально с их типом штрих-кода.

Случайный пример:

 012315612323 - Code128 (scanned)
561516551588 - Custom (manually inputted)
0123156124xx - Code128_Custom (scanned, then edited by user!!)
  

Библиотека сканирования, которую я использую, идентифицирует типы штрих-кодов при сканировании, поэтому у меня есть ArrayList объектов, который сохраняет отсканированные штрих-коды с соответствующим типом штрих-кода.

 public class BarcodeObject
    {
        private int _position = -1;
        private String _barcode = "";
        private String _barcodeType = "";
    }
  

Проблема, с которой я сталкиваюсь, заключается ArrayList<BarcodeObject> в синхронизации с EditText, когда пользователь вручную редактирует штрих-код.

Есть ли у вас какие-либо идеи о том, как я должен это сделать?

Редактировать 1: Спасибо за ваши ответы. Одна из проблем заключается в том, что я не знаю, какой штрих-код изменяет пользователь. Мне удалось решить эту проблему, используя numbersList.getSelectionStart(); , чтобы узнать, где находится курсор, а затем искать ближайший » n», чтобы определить правильный штрих-код (bcs все штрих-коды находятся между » n»). Но что произойдет, если пользователь щелчком мыши выберет более одного штрих-кода и изменит их. Я просто не знаю, как синхронизировать их.

Комментарии:

1. Сохраните TextWatcher в своем edittext и попробуйте выполнить поиск в существующем arraylist, если пользователь что-то изменил

Ответ №1:

вы можете обновить список массивов на основе индекса, например :

 private ArrayList<BarcodeObject> barcodes = new ArrayList<Object>();
barcodes.set(#indexposition#, #BarcodeObject#);
  

и добавьте getter и setter в ваш класс BarcodeObject для обновления объекта;

Ответ №2:

Предполагая, что у вас есть только EditText, и вы хотите сохранить данные после того, как пользователь перестанет печатать…

Вы должны расширить класс с помощью TextWatcher и переопределить afterTextChanged(),beforeTextChanged() , onTextChanged() . Вы должны написать желаемую логику в методе afterTextChanged() для достижения необходимой вам функциональности.

Это означает, что в вашем afterTextChanged() вы можете написать следующий код, и он будет работать хорошо..

 bcodes.set(#position#, #Barcode-Object#);
  

Предполагая, что вы уже инициализировали bcodes…

 private ArrayList<BarcodeObject> bcodes = new ArrayList<Object>();
  

Надеюсь, это поможет. Приветствия!