使用setText()更新后TextView消失

时间:2011-08-10 20:01:46

标签: android android-layout android-emulator

我有3个类:main,Sublist和editcrap。

现在我有2个文本视图,由Sublist xml文件中的Button分隔;以及我的editcrap xml文件中的EditText和Button。

我想要做的是从editcrap活动的EditText中获取文本输入,单击Button并将其返回到Sublist活动,并将其显示在Sublist xml文件的第一个textview中。我使用Intents和Sublist actvity中的startActivityForResult()完成了这项工作。

问题:

但是在Sublist活动中收到数据bak之后;在“subject1.setText(newText);”之后代码被执行...我在模拟器中的子列表活动中看到的是Button(应该在2个TextView之间)和右边的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返回输入文本。

3 个答案:

答案 0 :(得分:1)

根据documentation,请始终使用以您的包名称为前缀的额外名称。

例如:"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.thetext”,所以我以后不会输入错误(不是编译时)检查好吗?)。但是你可以类似地使用常量:

static final String THE_TEXT = "com.example.thetext";

答案 1 :(得分:0)

我遇到了类似的问题,我的textView在几次循环之后进行了分析,并意识到我尝试为settext参数分配一个空值而导致这个问题

TLDR;检查字符串是否为空

答案 2 :(得分:-2)

您可能希望使用不同的getStringExtra重载。

尝试使用data.getStringExtra("thetext","defaultText")。这将确保将SOMETHING置于视图中。

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

希望这有帮助。