2011-08-10 57 views
0

我有3个类:main,Sublist和editcrap。TextView在使用setText更新后消失

现在,我有2个textviews按钮在子列表xml文件中分隔;并在我的editcrap xml文件中使用EditText和Button。

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

问题:

但是在Sublist活动中接收到数据bak后;之后的“subject1.setText(newText);”代码被执行......我在模拟器中的子列表活动中看到的是按钮(应该在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上输入文本。

+0

我猜如果从另一个Activity,newText返回的数据是空的,TextView将'消失'。你能显示代码来传回数据吗? (希望调用setResult(int resultCode,Intent data)) – antonyt

+0

你确定额外的设置?你能否展示第二项活动如何提供额外的数据? – Ribose

+0

我编辑了我的问题,并显示来自第二个活动的代码的putExtra部分:) – zanazaar

回答

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"; 
+0

试过这个,但它给予相同的行为...... :(这可能与xml属性有什么关系? – zanazaar

+0

'theText'在行'i.putExtra(“thetext”,theText)上的值是多少?(设置一个断点)? – Ribose

+0

theText包含来自EditText之前的OnClick()方法...即,最终字符串theText = sub1.getText()。toString(); – zanazaar

-2

您可能想要使用getStringExtra的不同重载。

尝试使用data.getStringExtra("thetext","defaultText")。这将确保SOMETHING将被放入视图。

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

希望这会有所帮助。

+0

对不起,但为什么这是downvoted?如果您认为这是不正确的,请发布您自己的解决方案。 – Codeman

+0

这个break在case语句中是正确的,并且不在if语句块或其他东西中(在未经编辑的问题中,它似乎只是忘记了方法的关闭'}')。如果编码员希望在未处理的情况下发生某种情况,则需要'default'。在这种为requestCode获取'onActivityResult'的情况下,这个应用程序没有请求,一个很好的回应是不做任何事情并放弃它。做'default:break'可能会看起来不错,但不会回答这个用户的问题。那么。 :) – Ribose

+0

忍者编辑更好的答案。我也赞成你的回答,因为它更完整。 :) – Codeman

0

我也有类似的问题,我TextView的几个循环之后dissepeared,并意识到,我尝试将空值分配到的setText参数,它会导致此问题

TLDR;检查你的字符串,如果他们为空