0

有两个班。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);
}

但它不起作用。我尝试将记录器和 setLogText() 方法设为静态,但它仍然不起作用。该应用程序只是崩溃。

这可能很容易,但我没有想法。

4

3 回答 3

1

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

你真的应该阅读AsyncTasks的文档

不能从 doInBackground 方法更新 UI,因为它不在 UI 线程中运行并且会给您一个异常。

此外,您应该发布应用程序崩溃时遇到的异常,以便我们更好地了解问题所在。但我猜你正试图从错误的线程中更新文本。

于 2012-05-20T22:24:30.293 回答
1

我在我正在开发的应用程序中做了很多工作,它是安卓平板电脑上的一种 MDI 类型的应用程序。

做你所要求的......

在 MainActivity 中有

public static void setText(String txt){
  ((TextView)findViewById(R.id.mainTextLog)).setText(txt);
}

然后在孩子(或调用类)中调用它就像......

MainActivity.setText("myTextToShow");

就是这样...我使用的是android api level 12 ...如果我没记错的话,它也可以在api level 7中使用。

希望这可以帮助...

于 2012-05-20T22:24:53.157 回答
0

一种可能性是:当您调用setLogText另一个 X 类时。 MainActivity 可能不再存在,这会导致loggernull 引用?

于 2012-05-20T22:24:42.920 回答