8

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

我想拍照,拍照后,EditText活动的s变得清晰。我正在做的是将 的值设置为用于EditText在拍照后恢复它们。StringsgetText().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是全球性的 和EditTexts是全球性的。tempSpotNametempSpotDescStrings

如何设置文本?

4

5 回答 5

17

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

正如我们在评论中所讨论的,如果你setText()再次调用这样的方法,onResume()将会覆盖onActivityResult().

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

于 2012-11-14T21:30:23.620 回答
10

有时改变结果edittextonactivity行不通的。我也面临同样的问题

而不是设置

edittext.settext("yourtext");

更改为跟随onactivityresult

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

它对我有用。

于 2016-03-11T10:11:36.033 回答
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();



    } 

});

祝你好运 :)

于 2012-11-14T21:18:43.200 回答
0

您可以强制使用 EditText.SetText("blablabla..."); 在您的 OnActivity 结果中通过 3 个简单的步骤:

  1. 将您的布​​局重新加载到您的活动中
  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()); 
        }
于 2014-03-17T09:50:28.920 回答
0

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

val editText= EditText(context)
editText.apply {
   layoutParams = LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTEXT
        )}
editText.doOnPreDraw {
    editText.setText("your text")
}
于 2020-11-18T09:58:43.733 回答