gpt4 book ai didi

Android:无法从线程内访问 View

转载 作者:行者123 更新时间:2023-11-29 21:03:35 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的应用程序示例,它将运行一个 for 循环,每次将其计数器递增 1,然后使用计数器 i 的当前值更新 View 并打印出来:“我=#”我收到一条错误消息,提示您无法更新不是在该线程中创建的 View 。我试图通过从线程内膨胀 View 以及创建新的 TextView 并调用“setContentView(myTextView)”来解决这个问题。但这些都没有解决问题。我尝试了一个使用 AsyncTask 的不同版本,但我被困在如何将代码分成每个 AsyncTask 方法的问题上。有人可以帮助我了解如何执行此操作,因为它向我表明我对这一点的理解有所缺失。谢谢爱德华附言。 inflater 和 setContentView 的注释掉的行是我尝试修复它的结果。

我最初尝试更新应用程序主布局中的 TextView“myTextView”的代码:

public void loopForever(View view) {

Thread thread = new Thread(){
public void run(){

// LayoutInflater inflater = null;
// inflater.inflate(R.layout.activity_main, null);

TextView myTextView;
myTextView = (TextView) findViewById(R.id.myTextView);
// setContentView(myTextView)

for(int i = 0; i < 1000; i++){
myTextView.setText("i = " + i);
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
thread.start();
}

最佳答案

您只能从 UI 线程( Activity 、 fragment 等回调)中访问 View 元素。您可以切换到 Asynctask 并通过后执行或发布进度回调 (http://developer.android.com/reference/android/os/AsyncTask.html) 进行 UI 更改,或者使用 runOnUiThread,示例:

public void loopForever(View view) {

Thread thread = new Thread(){
public void run(){
for(int i = 0; i < 1000; i++){
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
(TextView) activity.findViewById(R.id.myTextView).setText("i = " + i);
}
});
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
thread.start();
}

关于Android:无法从线程内访问 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25213629/

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