gpt4 book ai didi

java - Android APP主线程内更新进度条

转载 作者:行者123 更新时间:2023-12-01 11:37:16 27 4
gpt4 key购买 nike

我有2 个按钮以及一个进度条。现在我想从 0 到 100 计数并用计数器更新进度条。不幸的是,这个计数太快了,我看不到进度(我只能看到进度条在一“毫秒”内从 0 跳到 100。)。

这是我到目前为止所尝试过的,但是还是发生了与以前相同的情况。

单击按钮启动计数器,应用程序变得无响应(我在主线程内计算,所以没关系(这正是我想要在这里完成的任务) (!))) 并不久后将进度条设置为 100没有介于两者之间

现在,如果您能引导我走向正确的方向,我将不胜感激! :)

public class MainActivity extends ActionBarActivity {
public String TAG = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

addButtonListeners();
}

public void addButtonListeners() {
Button firstButton, secondButton;
final ProgressBar pgBar;

firstButton = (Button) findViewById(R.id.first_button);
secondButton = (Button) findViewById(R.id.second_button);
pgBar = (ProgressBar) findViewById(R.id.progressBar);


firstButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "First Button was pressed.");
for (int i = 0; i <= 100; i++) {
countProgBarUp(pgBar, i);
}
}
});

secondButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Second Button was pressed.");

}
});

}

public void countProgBarUp(ProgressBar pgBar, int counter) {
try {
Thread.sleep(100);
pgBar.setProgress(counter);

} catch (InterruptedException e) {
e.printStackTrace();
}
}
...
}

最佳答案

UI 变得无响应,因为您正在主线程上执行此操作并处于 sleep 状态。如果您没有从 onClick() 返回,则主线程无法处理 UI 更改,例如显示新进度。只有主线程可以更新 UI 组件并绘制它们。因此,它通常被称为 UI 线程。

您可以尝试创建一个Runnable,它将进度条更新为新的计数。创建一个绑定(bind)到 UI 线程的 Handler,并为 Handler 调用 postDelayed() 并为其提供一个 Runnable 实例。然后,只要您尚未达到最大进度,就可以在 Runnable 中再次发布它。

关于java - Android APP主线程内更新进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29848300/

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