【发布时间】:2020-07-23 09:02:12
【问题描述】:
我正在尝试实现一个显示某些活动进度的recyclerView,我决定使用android ProgressBar 来表示进度。 问题是当我在 onBindViewHolder() 中设置进度时,progressBar View 不保存表示的数据,有时甚至根本不显示。
我尝试了一些建议,例如在单独的 AsyncTask 中设置可见性和“setIndeterminate()”,没有任何效果。
PS:我使用的是自定义可绘制对象,但它也适用于普通的水平进度条。
Android Studio 中的预览截图:
@Override
public void onBindViewHolder(ObjectivesViewHolder holder, int position) {
Objective objective = objectives.get(position);
holder.objectiveTextView.setText(objective.getObjectiveTitle());
holder.goalTextView.setText(objective.getGoal() + "");
holder.achievedTextView.setText(String.valueOf(objective.getAchieved()));
new pbUiThread(holder.objectiveProgressBar).execute();
holder.objectiveProgressBar.getProgressDrawable().mutate();
holder.objectiveProgressBar.setProgress((int)objective.getProgress());
if (objective.isDone()) holder.objectivesRow.setAlpha((float) 0.3);
else holder.objectivesRow.setAlpha((float) 1.0);
}
异步任务:
public class pbUiThread extends AsyncTask<ProgressBar, Void, Void> {
ProgressBar progressBar;
public pbUiThread(ProgressBar progressBar) {
this.progressBar = progressBar;
}
@Override
protected Void doInBackground(ProgressBar... progressBars) {
progressBar.setVisibility(View.VISIBLE);
progressBar.setIndeterminate(false);
return null;
}
}
XML 布局中的进度条
<ProgressBar
android:id="@+id/objectiveProgressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_marginVertical="10dp"
android:layout_marginHorizontal="20dp"
android:max="100"
android:progress="50"
android:visibility="visible"
android:progressDrawable="@drawable/pb_circle"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
我在另一个没有 RecyclerView 的 Fragment 中使用了相同的布局,它的工作原理应该是这样。
有什么帮助吗?
更新: 经过数小时的调试后,我发现问题出在我的数据模型中我已经使用 Room 的 @Ignore 注释将进度字段设置为被数据库忽略,因为我认为我只需要它用于 UI)
@Ignore
private float progress;
PS:我仍然保留一个处理程序来更新进度
new Handler().post(new Runnable() {
@Override
public void run() {
holder.objectiveProgressBar.setProgress(progress);;
}
});
【问题讨论】:
标签: android android-recyclerview android-progressbar