【问题标题】:setText doesn't set text to EditTextsetText 没有将文本设置为 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...我是天才,哈哈,非常感谢!如果你回答我会检查它作为接受的答案!

标签: android android-edittext 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 个简单的步骤:

    1. 将布局重新加载到 Activity 中
    2. 重新绑定你的 EditText
    3. 照常使用 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")
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-01
        相关资源
        最近更新 更多