编辑框中的值只有在获取焦点后才会显示。Android

12
我正在制作一款应用程序,根据外部数据获取其布局。布局根据输入数据分为不同的块,并且借助于视图翻转器来显示这些块。每个块目前都包含一个或多个“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);
    }
}

这是一个问题实际应用的图片。

左边的图片显示所有值都正确。右边的图片在viewflipper中处于第二个位置,不会显示edittexts中的值,除了第一个获得焦点的值。我还应该提到,如果edittext已经获得焦点,即使我在viewflipper中切换到其他视图,然后再返回,它仍然会显示该值。

你能否发布完整的最小代码以复制你的问题? - Programmer Bruce
我认为我已经缩小了问题范围,它出现在这些小部件填充的ViewFlipper中。如果我告诉ViewFlipper通过运行SetCurrentView(int)命令来显示下一个视图,那么我就没有问题。问题是当我进行快速滑动时(动画视图跟随我的手指),我正在尝试调整“gone”,“invisible”和“visible”参数。我会在有时间的时候发布代码。在我将其发布到此处之前,我需要将其大量修剪。 - taktiger
你解决了这个问题吗? - Moog
2个回答

1

这个布局从这里看起来不在UI线程上,这意味着无论你改变什么,直到UI线程(也称为主线程)更新之前,你都看不到任何东西。UI / 主线程是所有活动运行的线程,因此很容易认为所有的更新都是自动的(因为你之前做过的工作大多也在Activity中)。onFocusChanged事件(在edittext上单击)将通过调用invalidate()来更新UI线程本身。如果需要,你可以通过调用EditText.invalidate()来强制更新它,但最好在创建后自然更新。没有看到你代码的其他部分,我能为你提供的就是这些,希望对你有所帮助 :)


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接