Android:类中的方法如何与UI对话?

时间:2011-11-09 16:51:23

标签: android user-interface

有, 这是我的代码结构:

MainActivity:

public class PureDataActivity extends Activity {

    private TextView statusView, logView;
        .....
        Connection myconnection = new Connection();
        myconnection.download()//I implement this in an AsyncTask, which I didn't type here
}

类连接:(这是另一个文件)

Public class Connection{
        private void download();
        //This method download some data from server for few minutes.
}

问题是如何使用一些数据速率信息每隔几秒更新UI中的textview?因为从Connection类我无法访问UI。

我知道在AsyncTask中我可以使用updateProgress来访问UI,但它在download()方法之外。如何在download()运行时访问UI?

感谢。

3 个答案:

答案 0 :(得分:1)

看看这个Handler。这将帮助你。此外,他们提供的bluetooth chat示例应该可以让您了解应该做些什么。

您基本上将创建一个处理程序,您将使用该处理程序将您的信息传递回ui活动。这将有助于处理所有消息。

答案 1 :(得分:0)

在AsyncTask中重写的runInBackgroundThread方法中,调用publishProgress。然后,您的主要线程将调用被覆盖的onProgressUpdate(稍后),这意味着您可以更新UI。

这是基础,但是通过网络连接,您可能有几种方法来设置连接,然后1个方法调用阻塞直到所有数据都被下载,这意味着您无法定期发布进度更新数据正在下载。

答案 2 :(得分:0)

您可以使用简单的回调。下面是Activity类实现回调的示例,但如果您愿意,可以拥有自己的对象。

public interface ConnectionCallback {
    void doYourStuff();
}

public class PureDataActivity extends Activity implements ConnectionCallback {

    private TextView statusView, logView;
        .....
        Connection myconnection = new Connection(this); // <-- this is where you pass the callback
        myconnection.download()//I implement this in an AsyncTask, which I didn't type here
    }

    @Override
    public void doYourStuff() {
       // do what you need to do on your TextView
    }
}

Public class Connection{
    private final ConnectionCallback connectionCallback;

    public Connection(final ConnectionCallback connectionCallback) {
        this.connectionCallback = connectionCallback ;
    }

    private void download() {
        //This method download some data from server for few minutes.
        // when you want to update your UI:
        connectionCallback.doYourStuff();
        //...
    }
}