我有一个处理所有UI内容的主要活动。在活动中,我的ListView
位于SlidingDrawer
,高于4 TextView
s。
我点击TextView
中的项目后,我想更改4 ListView
的文本。
我从在线数据库中获取文本,因此我将其中的代码放在一个额外的类中。
我创建了对workerclass的引用:
final OneTopic ot = new OneTopic();
在我的onClickListener中,我从workerclass
调用该方法ot.postData(position);
在workerclass的开头,我引用了主类
Main main = new Main();
当worker类完成时,它会调用更新Activity中的UI的方法。
main.displayText(body, title, date, poster);
它的调用方法如下:
public void displayText(String body, String title, String date, String poster) {
tx_body.setText(Html.fromHtml(body));
tx_title.setText(title);
tx_date.setText(date);
tx_poster.setText(poster);
}
如果我这样做,我的应用程序会在尝试设置文本时关闭
我做错了什么?
答案 0 :(得分:1)
在workerclass的开头,我有一个对main的引用 类
Main main = new Main();
这实际上是在创建Main类的新实例,而不是获取当前实例的引用。如果您希望从工作线程引用您的活动,则需要将活动作为参数传递。
ot.postData(Main.this, position);
答案 1 :(得分:0)
如果没有看到整个代码,我会看到两种可能性:
您的WorkerThread未在UI线程中运行,您只能从UI线程中更新UI对象。查看Android开发指南中的Worker Threads主题。基本上,displayText()的代码是我刚才提供的示例中Runnable所需的代码。
我对此声明感到有些不安:
在workerclass的开头,我引用了主类Main main = new Main();
如果主要是您的活动,那么您不应构建新活动。您需要引用启动工作线程的Activity实例。
希望这会有所帮助。我发现你是StackOverflow的新手。如果这回答了您的问题,请将其标记为已接受。祝你好运!