Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.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
Java 有没有一个可以改变文本视图的无限循环?_Java_Android_Loops_Kotlin - Fatal编程技术网

Java 有没有一个可以改变文本视图的无限循环?

Java 有没有一个可以改变文本视图的无限循环?,java,android,loops,kotlin,Java,Android,Loops,Kotlin,我的第一个Android项目,我的第一个Kotlin项目(Java示例将帮助我) 问题是: 我有一个文本视图。我可以用代码更改文本。但问题是,似乎我的活动必须结束,这样才能对gui进行更改 myTextView.setText("x = $x") //this works once do{ myTextView.setText("x = $x") //this doesnt work println("x = $x") //this works on standart io x+

我的第一个Android项目,我的第一个Kotlin项目(Java示例将帮助我)

问题是: 我有一个文本视图。我可以用代码更改文本。但问题是,似乎我的活动必须结束,这样才能对gui进行更改

myTextView.setText("x = $x") //this works once 

do{  
myTextView.setText("x = $x") //this doesnt work  
println("x = $x") //this works on standart io  
x++  
}while(true)  

do{  
myTextView.setText("x = $x") //this doesnt work until x reaches its limit   
x++  
}while(x<100)  
myTextView.setText(“x=$x”)//这只工作一次
做{
myTextView.setText(“x=$x”)//这不起作用
println(“x=$x”)//这适用于标准io
x++
}while(true)
做{
myTextView.setText(“x=$x”)//在x达到其极限之前,此操作不起作用
x++

}虽然(x不清楚你在你的应用程序中试图做什么…如果是一个简单的
TextView
,计数高达100,你将不得不使用一个单独的线程来进行计数和等待,如果你不想让你的应用程序变慢的话

在android中,活动的UI线程基本上处于一个恒定的循环中,等待用户输入和对视图的更改发布到队列中,然后依次处理。因此,建议将业务逻辑排除在主线程之外。任何长时间运行的操作都会延迟它执行它想要执行的任务——计算v查看外观并每秒刷新屏幕60次

一种方法是使用
AsyncTask
,这是一种创建新线程以运行某些业务逻辑的方法,它提供了在完成时更新主UI线程的方法

main活动中创建一个如下所示的内部类:

private class CounterTask extends AsyncTask<Integer, Integer, Boolean> {
    @Override
    protected Boolean doInBackground(Integer... integers) {
        int count = 100;
        for (int i = 0; i < count; i++) {
            try {              
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            publishProgress(i);
        }
        return true;
    }

    @Override
    protected void onProgressUpdate(Integer... status) {
        super.onProgressUpdate(status);
        int current = status[0];
        TextView textView = findViewById(R.id.counter_text_view);
        textView.setText(String.valueOf(current));
    }
}

如果它比简单地告诉我如何使用第二个线程来更改textview更简单,而不会得到“只有创建视图层次结构的原始线程才能接触其视图”错误。此外,只要我使用同一个线程,我对Handler.post()的解决方法就会起作用,因此runnable调用Handler.post(此)而不是while(true)在和中,这就像一个while(true)循环。“如果你不想让你的应用程序变得迟钝”这不是我的问题的一部分,我知道循环除了更改文本字段之外什么都不做不是最好的做法。这并没有改变我需要知道如何做的事实,因为它的基本知识。我更新了我的答案,将运行计数器的代码包含在
异步任务中,它基本上负责创建ndling一个单独的线程来执行一项任务,并在主线程上运行代码(当它有一个进度更新或完成时)。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Run your counter task
    CounterTask task = new CounterTask();
    task.execute();
}