当前位置: 首页 > 知识库问答 >
问题:

正在从新得可运行类更新主线程[duplicate]

公风史
2023-03-14

我正在尝试动态更新主线程中的一个androidlinearlayout

不幸的是,我很难从网上的教程中找到任何东西。它们似乎都没有提供线程之间如何通信的完整图片。

public class MainActivity extends AppCompatActivity {

    private LinearLayout layout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        layout = new LinearLayout(this);
        setContentView(layout);

        Updater updater = new Updater();
        Thread workerThread = new Thread(updater);
        //somehow update layout
public class Updater implements Runnable {

    private int count = 0;

    public Updater() {}

    @Override
    public void run()
    {
        for (int i = 0; i < 10; i ++){

            try {
                count++;
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

我希望避免匿名类,只要updater有新消息,就动态创建新的TextView

共有1个答案

沙宣
2023-03-14
  1. 创建WorkerThreadListener接口:
public interface WorkerThreadListener {
    void onUpdate(int counter);
}
public class Updater implements Runnable {

    private final WorkerThreadListener mWorkerThreadListener;
    private final Handler mHandler;

    private int count = 0;

    public Updater(final WorkerThreadListener workerThreadListener) {
        this.mWorkerThreadListener = workerThreadListener;
        this.mHandler = new Handler();
    }

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            try {
                count++;
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        mWorkerThreadListener.onUpdate(count);
                    }
                });
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
public class MainActivity extends AppCompatActivity {

    private LinearLayout layout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        layout = new LinearLayout(this);
        setContentView(layout);
        Updater updater = new Updater(new WorkerThreadListener() {
            @Override
            public void onUpdate(int counter) {
                //update layout here
            }
        });
        Thread workerThread = new Thread(updater);
        workerThread.start();
    }
}
 类似资料:
  • 问题内容: 我对android完全陌生,只想知道它是否是在主线程外更新UI的任何可行且可行的方法。仅从我的代码中,我就在下面列出了这些代码;根本不可能。但是, 我只想使用另一个线程来更新UI 。请事先帮助我! 问题答案: 使用activity.runOnUiThread

  • 问题内容: 我正在构建一个Swing应用程序,功能的一部分应该是视觉和听觉上(使用Mary TTS)处理和输出一些文本。我需要一些有关GUI和文本处理类进行通信的最佳方式的建议。 GUI类是JPanel的子类。在其中,我有一个实现Runnable的类,称为LineProcesser,它准备将要分发给音频播放器的文本。我正在使用线程执行器将其保留在EDT之外(这可能不是最好的方法,但它似乎达到了我追

  • 问题内容: 您好,我想知道从swingworkerthread向jtextarea添加文本的最佳方法是什么,我创建了另一个类,Threadsclass()。execute()调用了jbutton。并且线程与此代码并行运行 现在id要做的是将x的值添加到主gui上的文本区域,任何想法都值得赞赏。 问题答案: JavaDocs有一个很好的例子 看一下发布和处理 潜在的意图是,您仅需要从事件调度线程中更

  • 问题内容: 我有一个正在运行的线程,但是从外面我无法绕过一个值来停止该线程。如何在内部发送false / true值或调用运行线程的公共方法?当我按下按钮1?例如: 或 跟进(校对): 问题答案: 如果您通过类而不是通过a定义它,则可以调用实例方法。 还要注意,由于多个内核具有自己的关联内存,因此您需要警告处理器该状态可能在另一个处理器上更改,并且它需要监视该更改。听起来很复杂,但只需将’vola

  • 我有一个带有一些线程的简单应用程序,我需要从一些线程更新SWING GUI(我正在使用Netbean)。 这是我需要更新的主要表单: 现在我有一些线程: 在其他班级,我有: 代码的每个部分都位于不同的文件(类)中。我如何在这里实现 Swing 工作人员,以便能够在我的主 GUI 窗体上显示文本?

  • 我有一个主要的方法,它应该从一个乐高机器人的数据绘制一个地图,主线程应该处理它从机器人获得的数据: } 如何从线程获取数据来更新GUI?