1

我知道有几个关于这个的问题,但我仍然不明白。我有一个活动

package test.example.om;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import test.example.om.Texter;

public class TextActivity extends Activity {
   /** Called when the activity is first created. */

    public String text="Helloo";
    @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       Texter myTexter = new Texter(); 
       myTexter.textTexter();


   }
    public void textSet(){
        TextView tv = (TextView) findViewById(R.id.myTextViewInXml);
           tv.setText(text);
}
}

还有一个类Texter

package test.example.om;

import android.widget.TextView;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Texter extends Activity{
String string="Helloo";


public void textTexter(){
    TextView tv = (TextView) findViewById(R.id.myTextViewInXml);
       tv.setText(string);
}
}

LogCat 显示 NullPointerException 并且应用程序崩溃。我做错了什么,如何从另一个类而不是主活动类将文本设置为 TextView?

4

1 回答 1

3

您正在实例化一个活动子类,并且您不应该这样做......此外,您正在尝试 findViewById(在 Texter 类中),而您的上下文为空,因为您没有经历正确的活动生命周期。

为了更改文本视图的文本,只需将 textTexter 方法从 Texter 移动到 TextActivity 并调用它。删除未使用的 Texter 活动。

package test.example.om;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import test.example.om.Texter;

public class TextActivity extends Activity {
   /** Called when the activity is first created. */

    public String text="Helloo";
    @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       TextView tv = (TextView) findViewById(R.id.myTextViewInXml);
       tv.setText(text);


   }

}

编辑:刚刚注意到你想从另一个班级做。为此,只需引用要更改的文本视图并在其上设置文本

于 2011-08-29T18:31:53.443 回答