gpt4 book ai didi

android - 从另一个类中的线程更新 Android UI

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:04 25 4
gpt4 key购买 nike

我在这里看到了一些问类似问题的问题,但我还没有看到合适的答案。许多人问过如何从线程更新 UI,但他们几乎总是与 UI 在同一个类中。

我正在尝试做的是从另一个类中创建的线程更新 UI。我已经看到了所有的建议,例如异步、处理程序、可运行等...但是我在单独的类中实现它们时遇到了真正的麻烦。

我试图使我的 UI 类保持最少,并且只处理与 GUI 的交互,例如当用户按下按钮时。现在,我在一个新类中创建了一个新线程,它连接到蓝牙设备,但我想将 UI 线程中的按钮从“连接”按钮更改为“断开连接”按钮(即更改从创建蓝牙套接字到关闭它的按钮)。

执行此操作的一般方法是什么?我是不是认为这一切都错了,应该把所有的东西都放在一个类(class)里?在“主”UI 类和其他类/线程之间进行交互的正确方法是什么?

理想情况下,我希望能够进行其他 UI 交互,因此一些允许在 UI 类之外更改其他 UI 的解决方案会很棒!

最佳答案

What I'm trying to do is update the UI from a thread which has been created in another class. I've seen all of the suggestions, such as async, handlers, runnable, etc... but I've having real trouble implementing them in separate classes.

一般来说,为了您的目标,我建议您使用:

我不认为它太棘手。绝对不。如果你在某些 Activity 类中将它作为单独的类而不是内部类,那么我建议使用构造函数,你将在其中传递上下文、小部件,通常是任何你想要的,然后在正确的方法(允许 UI 更新)更新您的 UI

我这样做是因为我喜欢有干净的类(所以 UI 类只有 UI 实现,逻辑是分开定位的)。

示例:

public class TaskExample extends AsyncTask<Void, Integer, Void> {

private Context c;
private Button b;

public TaskExample(Context c, Button b) {
this.c = c;
this.b = b;
}

protected Void doInBackground(Void... params) {
// some work
if (isSomethingConnected) {
publishProgress(Constants.IS_CONNECTED);
}
return null;
}

public void onProgressUpdate(Integer... params) {
switch (params[0]) {
case Constants.IS_CONNECTED:
b.setText("Connected");
break;
case Constants.ANOTHER_CONSTANT:
// another work
break;
}
}
}

用法:

public class Main extends Activity implements View.OnClickListener {

private Button b;

public void onCreate(Bundle b) {
super.onCreate(b);
// initialise widgets and set listeners to appropriate widgets
}

public void onClick(View v) {
switch(v.getId()) {
case R.id.connectBtn:
startWorker();
break;
}
}

private void startWorker() {
TaskExample te = new TaskExample(this, b);
te.execute();
}
}

关于android - 从另一个类中的线程更新 Android UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14986146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com