Подтвердить что ты не робот

Значение в edittext не отображается до тех пор, пока оно не начнет фокусироваться. Android

Я создаю приложение, которое получает его макет на основе внешних данных. Макет разбивается на разные блоки в зависимости от инда. Эти блоки отображаются с помощью viewflipper. В каждом блоке на данный момент есть одно или несколько "текстовых" и "edittext". На первой странице флиппера все данные отображаются как в текстовых, так и в edittexts. Но на других страницах в viewflipper значение в edittexts не показывается, пока edittext не будет сфокусирован. Понятия не имею почему. Чтобы было ясно. Значения для всех edittexts на самом деле есть, но не отображаются до тех пор, пока 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);
    }
}

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

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

4b9b3361

Ответ 1

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

Ответ 2

Не имея полного кода, я делаю немного предположения, но вы попробовали textView.invalidate() (если вы вызываете из потока графического интерфейса) или textView.postInvalidate() (если вы вызываете из другого потока)?