Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:类中的方法如何与UI对话?_Android_User Interface - Fatal编程技术网

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();
        //...
    }
}