0

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

我不确定我为什么会遇到这个问题。谁能明白为什么这没有达到预期的效果?

4

1 回答 1

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

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

(当然,说代码没有做“预期”的事情是错误的——它正在做人们对场景的期望。)

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

(但这是那些在没有良好汇编程序编程背景的情况下被转入 OOP 的人所犯的常见错误,等等。)

于 2013-01-27T18:32:52.950 回答