Konstantin18ko
@Konstantin18ko
Стоматолог

Не правильное отображение текста TextView, через ArrayAdapter?

Сделал так,чтоб каждое входящее сообщение записывалось в свой TextView.

Этот метод вызывается в потоке.
public void inputMessage(){
            try {
                InputStream inputStream = socket.getInputStream();
                DataInputStream dataInputStream = new DataInputStream(inputStream);
                String stringInputMessage;
                while (true){
                    if ((stringInputMessage = dataInputStream.readUTF()) != null){
                        final String finalStringInputMessage = stringInputMessage;
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                TextView textViewMessage = createTextView();
                                textViewMessage.setText(finalStringInputMessage);
                                listMessage.add(textViewMessage);
                                listViewMessage.setAdapter(arrayAdapterMessage);
                            }
                        });
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

Этот отдельно от потока.
private TextView createTextView() {
        textViewMessage = new TextView(this);
        return textViewMessage;
    }


В конечном итоге получается такая картина.
e803816cf6f8429fbb7a6c6dc9ba74c3.jpg

Элементы добавляются, но текста на них нет.
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 1
@itdroid
Проблема в адаптере.

Не надо создавать новый TextView для новых сообщений, просто добавляйте сообщение в список всех сообщений и передавайте этот список в адаптер, чтобы обновить ListView (в этом случае получите переиспользование TextView из коробки):

List<String> messages = new ArrasyList<>();

//when new message arrives
messages.add(msg);

//update adapter
arrayAdapterMessage.setMessages(messages) ;
arrayAdapterMessage.notifyDatasetChanged();


Адаптер будет ответственным за создание и переиспользование TextView.

Тут написано как работать с ListView:
www.vogella.com/tutorials/AndroidListView/article.html
startandroid.ru/ru/uroki/vse-uroki-spiskom/82-urok...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы