如何在创建视图后更改编辑文本

时间:2013-06-10 18:12:25

标签: android textview

我需要通过返回活动来更改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的文本?

3 个答案:

答案 0 :(得分:1)

您可以在下面看到一个简单的示例,说明如何更改方法EditTextonActivityResult的文字。

以下是第一项活动的代码:

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

}

答案 1 :(得分:1)

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

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

  1. 将您的布局重新加载到您的活动中
  2. 重新绑定您的EditText
  3. 像往常一样使用SetText。
  4. 在此示例代码中,我使用和传递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()); 
    
            }
    

答案 2 :(得分:0)

请勿在OnActivityResult中更改视图-因为如果活动停止并且在某个时候抹掉了内存,这是确保程序崩溃的肯定方法-现在正在重新创建它。

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


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


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