繁体   English   中英

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

[英]Value in edittext don't show until it get focus. Android

我正在构建一个基于外部数据获取其布局的应用程序。 根据 indata 将布局分成不同的块。 这些块在取景器的帮助下显示。 在每个块中,暂时有一个或多个“textview”和“edittext”。 在翻转器的第一页上,所有数据都在 textviews 和 edittexts 中显示。 但在 viewflipper 的其他页面上,edittexts 中的值直到edittext 获得焦点才会显示。 我不知道为什么。 所以要清楚。 所有编辑文本的值实际上都存在,但直到编辑文本获得焦点时才会显示。 在我运行该应用程序的所有设备(模拟器、HTC Desire、HTC Wildfire)上,问题都是相同的。 有谁知道如何解决这个问题?

这是生成布局的 class :

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);
    }
}

这是实际问题的图片。

左图很好地显示了它的所有值。 右图在取景器中的第二个 position 上,并且不显示编辑文本中的值,但第一个具有焦点的除外。 我还应该提到,在编辑文本获得焦点后,即使我在 viewflipper 中跳转到其他视图然后返回,它也会继续显示该值。

从此处显示的布局来看,它不在 UI 线程上,这意味着无论您进行什么更改,在 UI 线程(也称为主线程)更新之前您都不会看到任何内容。 UI/主线程是你所有的活动所运行的,所以很容易认为这些东西只是自动更新(因为你之前所做的大部分工作也在活动中的某个地方,我假设)。 onFocusChanged 事件(在编辑文本中单击)将通过调用自身的 invalidate() 来更新 UI 线程。 如果需要,您可以通过调用 EditText.invalidate() 来强制它更新,但通常最好在创建后自然更新。 在没有看到您的代码的 rest 的情况下,这是我能为您做的最好的事情,我希望这会有所帮助:)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM