Android:类中的方法如何与UI对话?
那里,, 这是我的代码结构: 主要活动:Android:类中的方法如何与UI对话?,android,user-interface,Android,User Interface,那里,, 这是我的代码结构: 主要活动: public class PureDataActivity extends Activity { private TextView statusView, logView; ..... Connection myconnection = new Connection(); myconnection.download()//I implement this in an AsyncTask, whic
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
}
类连接:(它是另一个文件)
问题是我如何每隔几秒钟在UI中用一些数据速率信息更新textview?因为我无法从连接类访问UI
我知道在AsyncTask中,我可以使用updateProgress访问UI,但它不在download()方法的范围内。下载()运行时如何访问UI
谢谢。看看这个。这会帮你的。此外,他们提供的例子应该让你知道你应该做什么
基本上,您将创建一个处理程序,用于将信息传递回ui活动。这将有助于处理所有消息。在AsyncTask中重写的runInBackgroundThread方法中,调用publishProgress。然后将在主线程上调用重写的onProgressUpdate(稍后),这意味着您可以更新UI
这是基础,但是对于网络连接,您可能有两种方法来设置连接,然后有一种方法调用会阻止,直到所有数据下载完毕,这意味着您无法在数据下载时定期发布进度更新。您可以使用简单的回调。下面是一个示例,其中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();
//...
}
}
公共接口连接回调{
作废你的东西;
}
公共类PureDataActivity扩展活动实现ConnectionCallback{
私有文本视图状态视图、日志视图;
.....
Connection myconnection=new Connection(this);//谢谢。您使用Connection myconnection=new Connection(this);作为构造函数。但是如果我的构造函数是Connection(arg1,arg2,arg3),该怎么办呢?在这种情况下,我应该怎么做才能传递回呼?新建连接(this,arg1,arg2,arg3)=>“this”就像您可以传递的任何其他变量一样,它只引用范围中的当前对象。当然,这个额外的参数需要在您的连接构造函数中声明
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();
//...
}
}