[英]Retrieving Rating from Database and Setting of RatingBar on Android
[英]Setting the rating of the Android Ratingbar
因此,我試圖在觸摸事件期間在代碼中設置RatingBar(RB)小部件的等級。 基本上,當用戶單擊RB時,它必須做一些背景工作,然后RB的值顯然應該顯示新值。
好的,我還要聲明,我將RB用作“收藏夾”按鈕。 可能不是最好用的東西,但這並不意味着我不能,對吧?
RB僅由1星組成。 如果用戶單擊它,它將在“收藏夾”列表中添加一個項目並突出顯示該星標。 當用戶再次單擊它時,一定會從收藏夾列表中刪除該項目,但RB不會重置為0。
favourite_button.setOnTouchListener (new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if (_favourited) {
// do stuff
favourite_button.setRating(0);
_favourited = false;
} else {
// do stuff
favourite_button.setRating(1);
_favourited = true;
}
}
return false;
}});
我的代碼可以正常工作,但我看不出為什么“不利”不會將RB更改回0。
那么可能是什么問題呢? 當我在setOnRatingBarChangeListener中使用“ setRating(0)”時,可以肯定將等級設置為0。但是我不能使用RB的setOnRatingBarChangeListener,因為一個人不能“接觸”零星。
再次單擊時如何將其設置回0?
因此,@ Fondesa向我指出了為什么您無法在OnTouch事件中將評級設置為0。
RatingBar是從SeekBar擴展而來的,並且偵聽器實際上期望滑動動作。 因此,當只有一顆星時,RB不能設為0(或為此目的而不能設為0)。 ToggleButton是用於此類功能的合適的小部件(在此毫不奇怪)。
您應該注冊onTouchListener
,而不是使用OnRatingBarChangeListener
。 這樣,您不必擔心檢測觸摸事件的實現以及它是否會影響評分欄,您只需要擔心是否更改了評分即可:
favourite_button.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
_favourited = rating > 0;
}
});
http://developer.android.com/reference/android/widget/RatingBar.OnRatingBarChangeListener.html
綜上所述,我認為您要做的不僅僅是設置布爾值。 如果不是,則應該完全擺脫布爾值,只要實際需要該值,就可以調用favourite_button.getRating()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.