1

我需要通过返回活动来更改 EditText 和 TextView 的文本。

所以,在 onActivityResult 我做了以下事情:

protected void onActivityResult(int requestCode, int resultCode, Intent data){
    Bundle extras = data.getExtras();
    EditText edit = (EditText)findViewByID(R.id.edit);
    edit.setText(extras.GetString("edit");
    TextView tv = (TextView)findViewByID(R.id.tv);
    tv.setText(extras.GetString("tv");
}

TextView 的文本已更改,但 EditText 的文本未更改。

如果我更改 onCreate 上的文本一切正常,但在 onActivityResult 上只有 TextView 有效。

我的问题是:如何更改 onActivityResult 上 EditText 的文本?

4

3 回答 3

1

您可以在下面看到一个简单的示例,说明如何EditText在方法中更改 an 的文本onActivityResult

这是第一个活动的代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final Intent i = new Intent(this, MyActivity2.class);
    startActivityForResult(i, 0);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        final Bundle result = data.getExtras();
        if (!result.isEmpty() && result.containsKey("data")) {
            final EditText editText = (EditText) findViewById(R.id.edit);
            editText.setText(data.getStringExtra("data"));
        }
    }

}

这是第二个活动的代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    final Intent result = new Intent(this, MyActivity.class);
    result.putExtra("data", "test");
    setResult(RESULT_OK, result);
    finish();

}
于 2013-06-10T19:09:09.583 回答
1

你的逻辑是正确的,但 Android 有它的陷阱和地雷(像往常一样!)

您可以强制使用 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"); //Get the String from the Intent

        if (QRdata.length()>0)//Continue if the Intent´s text is not empty..
        {

                            //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:59:10.140 回答
0

不要更改您在 OnActivityResult 中的视图 - 因为如果活动停止并且在某个时刻从内存中擦除,这是让您的程序崩溃的可靠方法 - 现在正在重新创建。

在这种情况下,onActivityResult 很可能会在视图完成以从 OnCreate - setContentView 方法膨胀之前运行。


也不要在 onActivityResult 中使用 setContentView,因为它会重复在 OnCreate 方法中执行的昂贵操作。


解决方法(当您使用来自 OnActivityResult 的数据来填充 UI 视图时,例如 EditText 或 TextView)是设置一个变量,该变量将保留来自 extras 的值,然后稍后使用该变量 - 特别是在 OnResume 方法中。

于 2018-11-08T22:11:28.353 回答