findViewById更改for循环中的所有出现

时间:2017-09-07 22:04:23

标签: android for-loop layout-inflater

我有以下方法将视图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自定义进度。 我必须改变它吗?

1 个答案:

答案 0 :(得分:0)

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

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

这是一个“常见”问题。

我已经在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);