其他分享
首页 > 其他分享> > 使用setNumStars在执行期间更改星标的Android会使评级变得奇怪

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

作者:互联网

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

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

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

F P E E额定值= 1 F F P E额定值= 2

编辑:图像可以在这里找到:http://1drv.ms/1pyq3gS

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

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

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

解决方法:

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

由于这是进度条的扩展,我猜测当我改变星数时,进度条会拉伸到新的宽度,但保持原始值,而不是反映必须填充的部分.通过使用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);

通过这种方式,评级与填充的星星重合.

标签:android,ratingbar
来源: https://codeday.me/bug/20190703/1364898.html