我有3个类:main, Sublist和editcrap。
现在我有两个textviews由Sublist xml文件中的按钮分隔;和EditText和Button在我的editcrap xml文件。
我想做的是从editcrap活动中的EditText中获取文本输入,单击按钮并将其返回到Sublist活动并在Sublist xml文件的第一个textview中显示它。我已经使用intent和startActivityForResult()从子列表活动。
问题:
但是在Sublist活动中接收到数据后;在"subject1.setText(newText);"代码执行后…我在模拟器的子列表活动中看到的是按钮(应该在2个TextViews之间)和右边的TextView。左边的TextView消失了。模拟器上没有错误或什么都没有…只是TextView消失了。我一直想避开这事,但没成功。有人能告诉我我忽略了什么吗?:)
我代码:protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode)
{
case 1: if(resultCode==Activity.RESULT_OK)
{
String newText = data.getStringExtra("thetext");
subject1.setText(newText);
// this is where the textview supposed to update but
// instead vanishes entirely
}
break;
}
}
//second activity's code:
sub1 = (EditText) findViewById(R.id.peditText1);
final String theText = sub1.getText().toString();
parambutton1 = (Button) findViewById(R.id.parambutton1);
parambutton1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(editcrap.this, Sublist.class);
i.putExtra("thetext", theText);
setResult(Activity.RESULT_OK, i);
finish();
}
});
}
这是第二个活动从EditText返回输入文本的方式。
根据文档,总是使用额外的名称作为包名的前缀。
Ex: "com.example.thetext"
示例集结果:
data.putExtra("com.example.thetext", yourstring);
setResult(Activity.RESULT_OK, data);
示例获取结果:
String newText = data.getStringExtra("com.example.thetext");
subject1.setText(newText);
为了避免输入错误的额外字段名,我使用字符串资源,这样我就可以执行getString(R.string.extra_thetext)
,它存储"com.example"。为我的文本",这样我以后就不会打错了(编译时检查不是很好吗?)但是你也可以使用类似的常量:
static final String THE_TEXT = "com.example.thetext";
我有一个类似的问题,我的textView在几个循环后消失,并意识到我试图给settext参数分配一个空值,这会导致这个问题
TLDR;检查字符串是否为空
您可能需要使用不同的getStringExtra重载。
尝试使用data.getStringExtra("thetext","defaultText")
。这将确保某些东西将被放入视图。