我需要通过返回活动来更改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的文本?
答案 0 :(得分:1)
您可以在下面看到一个简单的示例,说明如何更改方法EditText
中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();
}
答案 1 :(得分:1)
你的逻辑是正确的,但Android有它的陷阱和地雷(像往常一样!)
你可以强制使用EditText.SetText(" blablabla ...");在您的OnActivity结果中 在3个简单的步骤中:
在此示例代码中,我使用和传递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中方法。