Search code examples
androidandroid-edittextsettext

setText doesn't set text to EditText


I'm having a problem that I've never had before in almost three years of developing with Android...

I want to take a picture and after the picture is taked, the EditTexts of the activity become clear. What I'm doing is set the values of the EditText to Strings using getText().toString() to restore them after taking the picture.

The strings are stored perfectly with the data, but when I use setText, it doesn't work... The strange thing is that setHint works!

How can it be?

Here's the code I'm using:

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

name and description are global EditTexts and tempSpotName and tempSpotDesc are global Strings.

How can I set the text?


Solution

  • onActivityResult() is not the last method called when returning to an Activity. You can refresh your memory of the Life Cycle in the docs. :)

    As we discussed in the comments, if you call setText() again in methods like onResume() this will override any text set in onActivityResult().

    The same goes for Fragments, you need to make updates in onViewStateRestored() method (which was added in API 17).