Значение в тексте редактирования не отображается, пока не получит фокус. Android - PullRequest
12 голосов
/ 05 мая 2011

Я создаю приложение, которое получает макет на основе внешних данных.Макет разделен на разные блоки в зависимости от индата.Эти блоки отображаются с помощью видоискателя.В каждом блоке на данный момент есть один или несколько «textview» и «edittext».На первой странице флиппера все данные отображаются так, как и должно быть в текстовых окнах и текстовых окнах.Но на других страницах в видоискателе значение в текстах редактирования не отображается, пока текст редактирования не будет сфокусирован.Понятия не имею почему.Так что, чтобы быть ясно.Значения для всех правочных текстов на самом деле есть, но они не отображаются, пока текст правки не будет сфокусирован.Проблема одинакова на всех устройствах, на которых я запускал приложение (эмулятор, HTC Desire, HTC Wildfire).Кто-нибудь знает, как решить эту проблему?

Вот класс, который генерирует макет:

public class ModuleLayout extends LinearLayout {

public ModuleLayout(Context context, ArrayList<BaseModuleItem> itemList) {
    super(context);
    TableLayout tempTable = new TableLayout(context);

        for (int i = 0; i < itemList.size(); i++)
        {
            TableRow tempRow = new TableRow(context);
            TextView tempTextView = new TextView(context);
            tempTextView.setText(itemList.get(i).getName());

            EditText tempEditText = new EditText(context);
            tempEditText.setText(itemList.get(i).getItemValue());

            tempRow.addView(tempTextView);
            tempRow.addView(tempEditText);

            tempTable.addView(tempRow);
        }

        tempTable.setColumnStretchable(1, true);
        this.addView(tempTable);
    }
}

Вот изображение проблемы в действии.

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

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

То, как это выглядит здесь, находится не в потоке пользовательского интерфейса, а это означает, что независимо от того, что вы изменяете, вы ничего не увидите, пока не обновится поток пользовательского интерфейса (также известный как основной поток). Поток UI / Main - это то, через что проходят все ваши действия, поэтому легко предположить, что материал просто обновляется автоматически (так как большая часть предыдущей работы, которую вы проделали, также находится где-то в Activity, я полагаю). Событие onFocusChanged (нажатие в тексте редактирования) обновит поток пользовательского интерфейса, вызвав invalidate () для себя. Вы можете принудительно обновить его, вызвав EditText.invalidate (), если вам нужно, но обычно лучше, чтобы он обновлялся естественным образом после создания. Не видя остальной части вашего кода, это лучшее, что я могу для вас сделать, надеюсь, это поможет:)

0 голосов
/ 01 сентября 2011

Не видя вашего полного кода, я делаю небольшое предположение, но вы пробовали textView.invalidate () (при вызове из потока GUI) или textView.postInvalidate () (при вызове из другого потока)?

...