使用setText()更新后TextView消失



我有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")。这将确保某些东西将被放入视图。

另外,如果您不知道,第一个参数是标记,而不是实际的文本。:)

最新更新