【问题标题】:Android using setNumStars to change stars during execution make the ratings act strangeAndroid 在执行过程中使用 setNumStars 更改星星使评级行为奇怪
【发布时间】:2014-04-25 01:30:05
【问题描述】:

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

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

想象一下:如果 F 是满星,P 是部分星(但不像半星),E 是空星,如果我触摸第二颗星,在第二颗和第三颗之间我得到:

F P E E 评级 = 1 F F P E 评级 = 2

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

如果我将该值返回为 5,则该条的行为与预期一致,填充的星号与评级一致。

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

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

【问题讨论】:

  • 你能发布你的代码吗?
  • 图片因此类问题而受到赞赏。您可以先将图像上传到某个地方并在此处链接。其他用户可以稍后将其放在您的问题上。
  • 好的,这是图片:1drv.ms/1pyq3gS。代码工作正常。我只是在使用rb.setNumStars(Integer.valueOf(rate)),其中 rate 是来自首选项的字符串。星星实际上变成了评分值。

标签: android ratingbar


【解决方案1】:

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

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

这样评分与填充的星星一致。

【讨论】:

    猜你喜欢
    • 2015-06-15
    • 2016-02-17
    • 2014-07-09
    • 1970-01-01
    • 2022-11-14
    • 2014-05-14
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多