Не вытягивает правильный объект из ArrayList при вызове - PullRequest
0 голосов
/ 24 марта 2011

У меня есть программа, которая принимает поток данных в виде байтов. Затем он берет байты и создает строки из допустимых байтов. Затем эти строки помещаются в arraylist и вызываются с помощью view.setText (arraylistname.get (int index) класса arraylist. Вот код. Messages - это ArrayList, position - индекс, а readMessage - строковый объект.

 case MESSAGE_READ:
            byte[] readBuf = (byte[]) msg.obj;
            // construct a string from the valid bytes in the buffer
            String readMessage = new String(readBuf, 0, msg.arg1);
           // rpmView.setText(readMessage);
            messages.add(readMessage);

            int position;       
            position = 0; //position < messages.size();){
            int position1;
            int position2;
            int position3;
            int position4;
            int position5;
                  rpmView.setText(messages.get(position));
                  position1 = position++;
                  tempView.setText(messages.get(position1));
                  position2 = position1++;
                  mphView.setText(messages.get(position2));
                  position3 = position2++;
                  gearView.setText(messages.get(position3));
                  position4 = position3++;
                  batteryVoltageView.setText(messages.get(position4));
                  position5 = position4++;
                  fuelLevelView.setText(messages.get(position5));

Проблема в том, что когда поток читается, все поля / представления отображают одинаковую информацию и не обновляются. Пожалуйста помоги. Я провел много исследований о списках и массивах, но я не хочу вертикальную прокрутку списка, я хочу, чтобы текстовые просмотры обновлялись при изменении данных, но макет остался прежним, за исключением изменения значений.

Ответы [ 2 ]

0 голосов
/ 24 марта 2011

Это может быть проблемой при использовании вами оператора постинкремента.

Это происходит:

// Using the post-increment operator.    
int position = 0;
int position1, position2, position3;
position1 = position++; // position1 = 0, position = 1
position2 = position1++; // position2 = 0, position1 = 1
position3 = position2++; // position3 = 0, position2 = 1

Возможно, вы захотите:

// Using addition.    
int position = 0;
int position1, position2, position3;
position1 = position + 1; // position1 = 1, position = 0
position2 = position1 + 1; // position2 = 2, position1 = 1
position3 = position2 + 1; // position3 = 3, position2 = 2

Или это:

// Using the pre-increment operator.    
int position = 0;
int position1, position2, position3;
position1 = ++position; // position1 = 1, position = 1
position2 = ++position1; // position2 = 2, position1 = 2
position3 = ++position2; // position3 = 3, position2 = 3
0 голосов
/ 24 марта 2011

вам нужно вызвать notifyDataSetChanged () для экземпляра Адаптера.Сделайте это в обработчике

...