【问题标题】:Android Progress not holding view when used with RecyclerView与 RecyclerView 一起使用时,Android Progress 不保持视图
【发布时间】: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


    【解决方案1】:

    您不应该在您的视图中保存进度,尤其是在回收器视图中,因为它将被重复使用,其他信息将被设置为它并且您的信息将会丢失。而是尝试将其保存在任何有意义的模型中,并在 onBindViewHolder 中设置该模型的进度。

    【讨论】:

    • 这就是我实际上在做什么?或者你能澄清你的答案吗?
    猜你喜欢
    • 2016-09-27
    • 2018-01-10
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多