将值从静态类传递给非静态类(android)?

时间:2013-01-27 02:18:07

标签: android class static

我已经成功地将静态类中的值传递给非静态类,但是当我将该值放入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
          }
  }

我不知道为什么我会遇到这个问题。谁能明白为什么这不符合预期呢?

1 个答案:

答案 0 :(得分:1)

HelloBubblesActivity hb=new HelloBubblesActivity();
hb.smiley(emotx); //send value to smiley method..

创建一个新的HelloBubblesActivity对象,但不调用onCreate,因此不会为editText1分配任何内容。从未分配过的字段在Java中为空。

(当然,要说代码没有按照“预期”做什么会是错误的 - 它正在完成人们对场景的期望。)

(您的错误很可能是认为在ANY HelloBubblesActivity对象中设置值会使值出现在所有HelloBubblesActivity对象中。单个对象不共享实例字段,并且您在一个对象中设置的内容不会神奇地出现在另一个对象中。你不能只是创建一个类的对象,并期望它与其他类的类进行某种超自然的通信。)

(但这是一个常见的错误,那些在没有良好的汇编编程背景的情况下被倾倒到OOP中的人,等等。)