![](/img/trans.png)
[英]Android , ProgressBar setVisibility while loading array inside OnClickListener
[英]setVisibility on ProgressBar in Android
我的 Android 應用程序中有以下進度條:
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="200sp"
android:layout_height="200sp"
android:layout_marginTop="60sp"
android:visibility="gone"
android:indeterminate="true"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
我還有一個帶有圖像的 ImageView。 我想做的是在調用 API 時,使圖像不可見並在其位置顯示 ProgressBar,然后在結束時再次顯示圖像並隱藏 ProgressBar。 但是,這不起作用:
searchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ProgressBar progressBar = findViewById(R.id.progressBar);
ImageView image = findViewById(R.id.image);
image.setVisibility(View.INVISIBLE);
progressBar.setVisibility(View.VISIBLE);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
makeRequest();
}
});
thread.start();
try {
thread.join();
progressBar.setVisibility(View.INVISIBLE);
image.setVisibility(View.VISIBLE);
} catch (InterruptedException e) {
}
}
});
我嘗試了 View.INVISIBLE 和 View.GONE 的各種組合,但沒有任何效果。 我也在這里搜索過類似的問題,但沒有一個回答我的問題。
我想可能是因為它消失和重新出現的速度太快了,我沒有注意到它,但即使我執行 Thread.sleep() 進度條仍然沒有出現。
我究竟做錯了什么?
在 OnClickListener 中調用OnClickListener
thread.join()
會阻塞 UI 線程,因此會阻塞任何 UI 更新。
要修復您的代碼,您可以刪除thread.join()
並放置progressBar.setVisibility(View.INVISIBLE);image.setVisibility(View.VISIBLE);
在 makeRequest( run()
makeRequest()
,但與runOnUiThread()
一起變形
searchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ProgressBar progressBar = findViewById(R.id.progressBar);
ImageView image = findViewById(R.id.image);
image.setVisibility(View.INVISIBLE);
progressBar.setVisibility(View.VISIBLE);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
makeRequest();
runOnUiThread(new Runnable() {
@Override
public void run() {
progressBar.setVisibility(View.INVISIBLE);
image.setVisibility(View.VISIBLE);
}
});
}
});
thread.start();
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.