setText 没有将文本设置为 EditText

Posted

技术标签:

【中文标题】setText 没有将文本设置为 EditText【英文标题】:setText doesn't set text to EditText 【发布时间】:2012-11-03 10:48:50 【问题描述】:

我遇到了一个使用 android 开发近三年来从未遇到过的问题...

我想拍照,拍照后,活动的EditTexts就清晰了。我正在做的是将EditText 的值设置为Strings,使用getText().toString() 在拍照后恢复它们。

字符串与数据完美存储,但是当我使用setText时,它不起作用......奇怪的是setHint起作用了!

怎么可能?

这是我正在使用的代码:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
        if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) 
            if (resultCode == RESULT_OK) 
                // Image captured and saved to fileUri specified in the Intent

                grabImage(imgView);

                for (int u = 0; u <= 2; u++)
                
                    if (savedImgs[u].equals(""))
                    
                        imgs = u + 1;
                        savedImgs[u] = photo.toString();
                        break;
                    
                

                /*Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); ---> It is a small bitmap, for icons...
                imgView.setImageBitmap(thumbnail);
                imgView.setVisibility(View.VISIBLE);*/

             else if (resultCode == RESULT_CANCELED) 
                // User cancelled the image capture
             else 
                Toast.makeText(this, "Image couldn't be taken. Try again later.", Toast.LENGTH_LONG).show();
            
        

        if (!tempSpotName.equals("") || !tempSpotDesc.equals("")) 

            name.setText(tempSpotName);
            description.setText(tempSpotDesc);
        
    

namedescription 是全局的 EditTextstempSpotNametempSpotDesc 是全局的 Strings

如何设置文字?

【问题讨论】:

我们可以看看你的布局xml代码吗?你甚至到达 name.setText(tempSpotName); ?你调试过这个吗? 只是检查,但 setText 被调用但显示不正确? if 语句不会阻止它被调用吗? (只是仔细检查,因为 setText 应该可以工作) 你在其他地方打电话给setText()吗?可能在onResume()? @Goot 和 @AJak 是的,我重新定义了 if 语句,它正在被调用。否则setHint 将不起作用...@Sam 我想我在 onCreate() 中调用它...我要检查它... @Sam okey...我没有意识到我在 onCreate() 中调用了 setText...我是天才,哈哈,非常感谢!如果你回答我会检查它作为接受的答案! 【参考方案1】:

onActivityResult() 不是返回 Activity 时调用的最后一个方法。您可以在文档中刷新您对the Life Cycle 的记忆。 :)

正如我们在 cmets 中所讨论的,如果您在 onResume() 等方法中再次调用 setText(),这将覆盖在 onActivityResult() 中设置的任何文本。

片段也是如此,您需要在 onViewStateRestored() 方法中进行更新(在 API 17 中添加)。

【讨论】:

onResume() 中的任何更改也会覆盖 onNewIntent() 中的更改。 Fragments 也是如此,需要在 onViewStateRestored() 方法(API 17 中添加)中进行更新。【参考方案2】:

有时在onactivity 中更改edittext 结果不起作用。我也遇到了同样的问题

而不是设置

edittext.settext("yourtext");

改为关注onactivityresult

edittext.post(new Runnable()
edittext.settext("yourtext");
);

它对我有用。

【讨论】:

可能是 edittext.post(new Runnable() @Override public void run() edittext.setText("yourtext"); /*注意 setText 是 caMel */ );跨度> 【参考方案3】:

首先你必须调试它。

有一个类叫做TextWatcher。每次您的 Textbox.Text 更改时都会调用它。所以这更容易调试和处理问题。网址:http://developer.android.com/reference/android/text/TextWatcher.html

实施示例:

name.addTextChangedListener(new TextWatcher() 

    @Override
    public void afterTextChanged(Editable s) 
        // TODO Auto-generated method stub

    

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) 
        // TODO Auto-generated method stub

    

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) 

        doSomething();



     

);

祝你好运:)

【讨论】:

【参考方案4】:

你可以强制一个 EditText.SetText("blablabla...");在您的 OnActivity 结果中 只需 3 个简单的步骤:

    将布局重新加载到 Activity 中 重新绑定你的 EditText 照常使用 SetText。

在这个示例代码中,我传递了一个带有意图的 URL 字符串并将其写入 TextView:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
       
    if (resultCode == RESULT_OK) 
    
        QRdata= data.getStringExtra("QRURL");

        if (QRdata.length()>0)
        
                            //Step1
            setContentView(R.layout.activity_confirmpackage); 
                            //Step2
            TextView qrtxt=(TextView)this.findViewById(R.id.qrurl); 
                            //Setp 3,Voilà!
            qrtxt.setText(QRdata.toString()); 
        

【讨论】:

【参考方案5】:

这个解决方案对我有用 (kotlin)

val editText= EditText(context)
editText.apply 
   layoutParams = LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTEXT
        )
editText.doOnPreDraw 
    editText.setText("your text")

【讨论】:

以上是关于setText 没有将文本设置为 EditText的主要内容,如果未能解决你的问题,请参考以下文章

Android Eclipse editText 在本地实例上的 setText 后不显示

setText 不适用于自定义 Edittext

使用输入类型编号在 EditText 中设置文本

Android AppCompatEditText,AppCompatTextView, setText 无ID

如何在editText.setText()中插入一个字符串

UiAutomator Android - setText 方法不起作用!