我正在尝试通过在切换到该视图之前更新textview中的文本来准备要显示的视图。
我已将textview变量声明为public,并在OnCreate中初始化
Info = (TextView) findViewById(R.id.BackDialogText);
然后在更改文本时,我得到一个nullpointerException
Info.setText(TheString);
setContentView(R.layout.mydialog_layout);
我在没有setText的情况下运行应用程序,它运行正常,向我展示了我的预定义文本视图。是否有一些技巧我缺少更新视图文本?
答案 0 :(得分:1)
只需交换线位置。
以下是工作代码段。
setContentView(R.layout.mydialog_layout);
Info.setText(TheString);
答案 1 :(得分:1)
基本上在设置视图之前
setContentView(R.layout.mydialog_layout);
到您的活动中,您无法在代码中使用视图中的元素。所以你的代码中必须有这样的东西
setContentView(R.layout.mydialog_layout);
Info = (TextView) findViewById(R.id.BackDialogText); // you cannot initialize your view before setcontentview
Info.setText(TheString); //this line must be always called after setContentView
答案 2 :(得分:0)
findViewById()在您正在调用它的视图中查找视图。
编辑:抱歉,我的Mac崩溃了,我无法进一步扩展。基本上,在Android中只有前景Activity活在任何一点。因此,即使从另一个Activity修改一个View也不是一个好主意。如果它只是您要修改的文本,那么您有几个选项,最简单的方法是在其中一个活动中使用公共静态变量,并使用该变量调用setText。
例如:
public class Activity1 extends Activity {
private static theString = "";
public static void setString(String s) {
theString = s;
}
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.mydialog_layout);
Info = (TextView) findViewById(R.id.BackDialogText);
Info.setText(TheString);
}
}
然后在Activity2中你可以打电话:
Activity1.setString("New String");