我正在尝试更新活动中的TextView,更新视图的方法是在主活动(正常情况)中,但调用此方法来自另一个类(和另一个线程)。
这是更新视图的方法,此方法在主要活动中, (请注意,所有日志都按正确顺序打印):
public void getDataFromFiles() {
String new_text = JsonReader.readTextData(dataName,activityName, this);
Log.i("Loading", "loaded text " + new_text );
if (new_text != null) {
TextView introText = (TextView) findViewById(R.id.loading_introTxt);
introText.setText(new_text);
}
}
这是从另一个名为LoadingThread的类调用的地方,它有引用(loadingActivity):
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Log.i("LoadingThread", "Will update loading screen");
loadingActivity.getDataFromFiles();
}
});
还要注意如何从主活动
调用LoadingThread类 LoadingThread loadingThread = LoadingThread.getInstance(this);
Thread thread = new Thread(loadingThread);
loadingThread.setActivity(this);
thread.start();
所以这就是流程: 主活动启动LoadingThread,然后再调用主活动中的一个方法,该方法应该更新视图,但这不会发生,但是当关闭应用程序并再次重新打开时,则会有更新。
答案 0 :(得分:0)
我发现了问题,它在
LoadingThread loadingThread = LoadingThread.getInstance(this);
Thread thread = new Thread(loadingThread);
loadingThread.setActivity(this);
而getInstance()是:
if (instance == null) {
instance = new LoadingThread();
instance.loadingActivity = loadingActivity;
}
return instance;
关闭并重新打开应用程序时,实例不为null,因此返回之前不再存在的活动,因为加载活动的引用未更新,所以我改变了它
if (instance == null) {
instance = new LoadingThread();
}
instance.loadingActivity = loadingActivity;
return instance;
现在它有效!