8

Androidを使った開発のほぼ3年間で、これまでにない問題が発生しています...

写真を撮りたいのですが、写真を撮った後、EditText活動の様子がはっきりします。私がやっていることは、写真を撮った後にそれらを復元するためEditTextStrings使用するにの値を設定することです。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);
        }
    }

nameおよびdescriptionはグローバルEditTextsであり、tempSpotNameおよびtempSpotDescはグローバルStringsです。

テキストを設定するにはどうすればよいですか?

4

5 に答える 5

17

onActivityResult()アクティビティに戻るときに呼び出される最後のメソッドではありません。ドキュメントでライフサイクルの記憶を更新できます。:)

コメントで説明したように、このsetText()ようなメソッドで再度呼び出すと、でonResume()設定されたテキストが上書きされonActivityResult()ます。

同じことがフラグメントにも当てはまります。onViewStateRestored()メソッド(API 17で追加された)で更新を行う必要があります。

于 2012-11-14T21:30:23.620 に答える
10

結果の変更edittextが機能しonactivityない場合があります。私も同じ問題に直面しました

設定する代わりに

edittext.settext("yourtext");

次のように変更しますonactivityresult

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

それは私のために働いた。

于 2016-03-11T10:11:36.033 に答える
3

まず、これをデバッグする必要があります。

TextWatcherというクラスがあります。これは、Textbox.Textが変更されるたびに呼び出されます。したがって、これは問題のデバッグと処理が簡単です。URL: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 に答える