我有以下方法,将视图Views添加到LinearLayout,并为每个视图在ProgressBar上设置进度:

private void showProgress(LinearLayout recentLayout) {
    recentLayout.removeAllViews();
    for (MyItem mItem : items) {
        final View view = LayoutInflater.from(getContext()).inflate(R.layout.listview_content, recentLayout, false);
        final ProgressBar progressBar = view.findViewById(R.id.listview_content_progress);

        // [...] simplifying a lot

        // mItem.getProgress().progess  --> float between 0 and 1
        progressBar.setProgress((int) (mItem.getProgress().progess * 100));

        recentLayout.addView(view);
    }
}


但是,执行此代码后,布局中的每个进度栏都将设置相同的进度(详细来说,最后一个元素的进度)。

我想念什么?对我来说,似乎每个进度条的进度都是单独设置的,而不是一次设置。

编辑

我不知道这是否可能是因为我使用了通过xml绘制的自定义进度。
我需要手动对其进行变异吗?

最佳答案

如果将drawable用于progressBar的“背景”。这是一个问题。

所有progressBar的可绘制对象与背景(或进度状态)相同。当您将进度状态设置为其中之一时,它将更改可绘制状态,并将其应用于所有进度条。

这是一个“常见”问题。

我已经在Horocope应用程序中遇到过它。只有3个进度条,所以我以不好的方式完成了:D

progressBar.setProgressDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.love_progressbar));
progressBar2.setProgressDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.job_progressbar));
progressBar3.setProgressDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.health_progressbar));

progressBar.setProgress(love);
progressBar2.setProgress(job);
progressBar3.setProgress(health);

10-07 19:27
查看更多