从“普通”类调用活动中的方法

时间:2011-07-29 14:34:59

标签: android

我有一个处理所有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);
}

如果我这样做,我的应用程序会在尝试设置文本时关闭
我做错了什么?

2 个答案:

答案 0 :(得分:1)

  

在workerclass的开头,我有一个对main的引用   类

Main main = new Main();

这实际上是在创建Main类的新实例,而不是获取当前实例的引用。如果您希望从工作线程引用您的活动,则需要将活动作为参数传递。

ot.postData(Main.this, position);

答案 1 :(得分:0)

如果没有看到整个代码,我会看到两种可能性:

  1. 您的WorkerThread未在UI线程中运行,您只能从UI线程中更新UI对象。查看Android开发指南中的Worker Threads主题。基本上,displayText()的代码是我刚才提供的示例中Runnable所需的代码。

  2. 我对此声明感到有些不安:

    在workerclass的开头,我引用了主类Main main = new Main();

    如果主要是您的活动,那么您不应构建新活动。您需要引用启动工作线程的Activity实例。

  3. 希望这会有所帮助。我发现你是StackOverflow的新手。如果这回答了您的问题,请将其标记为已接受。祝你好运!