Android / Java:从另一个类更改视图?

时间:2012-05-20 22:14:10

标签: android class view

有两个班级。 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()方法设为静态,但它仍然不起作用。该应用程序崩溃。

这可能很简单,但我没有想法。

3 个答案:

答案 0 :(得分:1)

如果您使用的是AsyncTask,则需要在onProgressUpdateonPostExecute中设置值。

您真的应该阅读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成为空引用?