有两个班级。 MainActivity,我在其中设置视图,以及我想要在MainActivity中更新视图的ClassX。 ClassX是从MainActivity调用的AsyncTask,如果它是相关的。
我想要做的是更改名为mainTextLog的视图的文本。我已经声明了一个全局TextView变量,并且在onCreate()方法中,我使用findViewById()将其设置为视图。
private TextView logger;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
logger = (TextView) findViewById(R.id.mainTextLog);
}
到现在为止,我应该能够从onCreate()更改文本,我可以。但是因为我想从另一个类(ClassX)更改它,我需要为它创建一个方法:
public void setLogText(String text) {
logger.setText(text);
}
但它不起作用。我已经尝试将logger和setLogText()方法设为静态,但它仍然不起作用。该应用程序崩溃。
这可能很简单,但我没有想法。
答案 0 :(得分:1)
如果您使用的是AsyncTask,则需要在onProgressUpdate或onPostExecute中设置值。
您真的应该阅读AsyncTasks
的文档你不能从doInBackground方法更新UI,因为它没有在UI线程中运行,并且会给你一个例外。
此外,您应该发布应用程序崩溃时获得的异常,以便我们更好地了解问题所在。但我猜你正试图从错误的帖子中更新文本。
答案 1 :(得分:1)
我已经在应用程序中完成了很多工作,它是Android平板电脑上的MDI类型应用程序。
做你想要的......
MainActivity中的
public static void setText(String txt){
((TextView)findViewById(R.id.mainTextLog)).setText(txt);
}
然后在孩子(或调用类)中称之为......
MainActivity.setText("myTextToShow");
就是这样......我正在使用android api等级12 ...如果我记得正确的话,它虽然在api 7级也有效。
希望这会有所帮助......
答案 2 :(得分:0)
一种可能性是:当您在另一个X类中调用setLogText
时,MainActivity可能不再存在,这会使logger
成为空引用?