我已经成功地将静态类中的值传递给非静态类,但是当我将该值放入EditText
时,我得到了一个错误,空值。
public class HelloBubblesActivity extends SherlockFragmentActivity {
public EditText editText1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_discuss);
editText1 = (EditText) findViewById(R.id.editText1);
}
public static class MyDialogFragment extends SherlockDialogFragment {
//i fill variable emotx is "test string"
public void emot(String emotx){
HelloBubblesActivity hb=new HelloBubblesActivity();
hb.smiley(emotx); //send value to smiley method..
}
}
public void smiley(String name){
Log.d("test", name); //result value is "test string" (success)
editText1.setText(name); //here is error
}
}
我不知道为什么我会遇到这个问题。谁能明白为什么这不符合预期呢?
答案 0 :(得分:1)
HelloBubblesActivity hb=new HelloBubblesActivity();
hb.smiley(emotx); //send value to smiley method..
创建一个新的HelloBubblesActivity对象,但不调用onCreate
,因此不会为editText1分配任何内容。从未分配过的字段在Java中为空。
(当然,要说代码没有按照“预期”做什么会是错误的 - 它正在完成人们对场景的期望。)
(您的错误很可能是认为在ANY HelloBubblesActivity对象中设置值会使值出现在所有HelloBubblesActivity对象中。单个对象不共享实例字段,并且您在一个对象中设置的内容不会神奇地出现在另一个对象中。你不能只是创建一个类的对象,并期望它与其他类的类进行某种超自然的通信。)
(但这是一个常见的错误,那些在没有良好的汇编编程背景的情况下被倾倒到OOP中的人,等等。)