使用setNumStars在执行期间更改星标的Android会使评级变得奇怪

时间:2014-04-25 01:30:06

标签: android ratingbar

我使用rb.setNumStars(int)将星形从给定的默认值(比如5)更改为具有app偏好的新星(比如4)。代码执行Ok,刷新片段后,我可以看到星号的变化为我设置的任何整数(条形的StepSize为1)。

问题在于,当我尝试在该条上设置评级时,填充的星星与评级值不一致,我必须在奇怪的地方触摸以获得值,即如果我触摸第一个星,我得到一个等级= 1,如果我触摸第二个,我仍然有一个等级= 1,填充的星是一个和第二个的片段。如果我在第二颗星和第三颗星之间触摸,我得到等级= 2,我得到两颗星星和一片片段。

想象一下:如果F是一个完整的星,P是部分(但不是半星),E是空星,如果我触摸第二个星,在第2个和第3个星之间我得到:

F P E E等级= 1 F F P E等级= 2

编辑:可以在此处找到图片:http://1drv.ms/1pyq3gS

如果我将值返回到5,则条形图按预期运行,填充的星星与评级一致。

我无法插入图片来解释这种行为,但我希望它足够清楚。

有谁知道为什么会发生这种情况以及如何纠正它?

1 个答案:

答案 0 :(得分:2)

似乎我能够回答我自己的问题。

由于这是进度条的扩展,我猜测当我更改星数时,进度条会拉伸到新宽度,但保持原始值,而不是反映必须填充的部分。通过使用setMax作为评级栏,我想我正在设置此栏的新限制,因此,我更改了星号并将最大值设置为该数字,如下所示:

RatingBar rb = (RatingBar) view.findViewById(rbars[r]);
rb.setNumStars(Integer.valueOf(SP.getString(rchars[r], "3")));
rb.setMax(Integer.valueOf(SP.getString(rchars[r],"3")));
rb.setRating(2);

通过这种方式,评级与填满的星星一致。