我知道有关于此问题的几个问题,但我仍然没有得到它。 我有一项活动
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并且应用程序崩溃。我做错了什么,如何从主活动类的其他类中将setText设置为TextView?
答案 0 :(得分:3)
您正在实例化一个活动子类,而您不应该这样做...... 此外,您正在尝试在上下文为null时查找ViewById(在Texter类中),因为您尚未完成正确的Activity生命周期。
要更改文本视图的文本,只需将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);
}
}
编辑:刚刚注意到你想从另一个班级做到这一点。为此,只需提供要更改的文本视图和setText的引用