edittext中的值在获得焦点之前不会显示。 Android的

时间:2011-05-05 12:36:30

标签: java android android-edittext viewflipper

我正在构建一个基于外部数据获取布局的应用。根据indata,布局分为不同的块。这些块在viewflipper的帮助下显示。在每个块中,暂时存在一个或多个“textview”和“edittext”。在鳍状肢的第一页上,所有数据都在textviews和edittexts中显示。但是在viewflipper的其他页面上,edititexts中的值才会显示,直到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中的其他视图然后返回,它仍会继续显示该值。

2 个答案:

答案 0 :(得分:1)

它在这里出现的布局不在UI线程上,这意味着无论你改变什么,在UI线程(也称为主线程)更新之前,你都看不到任何东西。 UI / Main线程是你所有活动都经历的,因此很容易认为这些东西只是自动更新(因为你以前的大部分工作也是在Activity中的某个地方,我假设)。 onFocusChanged事件(单击edittext)将通过调用invalidate()来更新UI线程。如果需要,可以通过调用EditText.invalidate()强制更新它,但通常最好在创建后自然更新。没有看到你的其余代码,这是我能为你做的最好的,我希望这会有所帮助:)

答案 1 :(得分:0)

没有看到你的完整代码我正在做一些猜测建议,但是你尝试过textView.invalidate()(如果从GUI线程调用)或textView.postInvalidate()(如果从另一个线程调用)?