2013-09-10 2 views
3

Моя проблема в том, что когда я оцениваю одно и то же значение снова, он не отвечает во второй раз. Это означает, что когда я ставлю «4», как в первый раз, тогда я не могу оценить as'4 'во второй раз ... Он реагирует только тогда, когда я оцениваю другое значение, а не «4».
РейтингBar: тот же рейтинг дважды

Вот что я пробовал (мне нужно действие для getRatingBar в моем коде).

public class InteractiveRatingBarActivity extends Activity implements 
     OnRatingBarChangeListener { 
    RatingBar getRatingBar; 
    RatingBar setRatingBar; 
    TextView countText; 
    int count; 
    float curRate; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     findViewsById(); 

     setRatingBar.setRating(curRate);//overall rating 
     getRatingBar.setOnRatingBarChangeListener(this);// ratingbar for user action. 

    } 

    private void findViewsById() { 
     getRatingBar = (RatingBar) findViewById(R.id.getRating); 
     setRatingBar = (RatingBar) findViewById(R.id.setRating); 
     countText = (TextView) findViewById(R.id.countText); 
    } 


    public void onRatingChanged(RatingBar rateBar, float rating, 
      boolean fromUser) { 
     DecimalFormat decimalFormat = new DecimalFormat("#.#"); 
     curRate = Float.valueOf(decimalFormat.format((curRate * count + rating) 
      /++count)); 
     Toast.makeText(InteractiveRatingBarActivity.this, 
       "New Rating: " + curRate, Toast.LENGTH_SHORT).show(); 
     setRatingBar.setRating(curRate); 
     countText.setText(count + " Ratings"); 
    } 


} 

заранее спасибо

ответ

1

Вы можете, т вызвать метод onRatingChanged(), когда когда-либо изменение в рейтинге bar..that это когда в два раза он может нажать кнопку с той же скоростью не изменяйте скорость, поэтому функции внутри onRatingChanged() не могут быть вызваны. Еще один возможный способ - вызвать вызов после каждого вызова onRatingChanged(). Но он не должен показывать предыдущую скорость в баре оценки.

Update:
Предположим, что вы делаете внутри onRatingChanged() заворачивают в функцию, processing(). Здесь, скорее всего, вам нужен измененный рейтинг. поэтому мы передаем его как параметр функции. Попробуйте следующий путь

  float newRating; 
    myRatingBar.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

     newRating=myRatingBar.getRating(); 
     processing(newRating); 

     } 
    }); 
+0

Это был не мой ответ? – Dyna

+0

Yup Я не сказал, что ваш ответ неправильный. Вы можете использовать оба метода touchListener и ratingbarChanged. – Ansar

+0

ok @Ansar * cheers – Dyna

5

Это происходит потому, что у вас есть OnRatingChange (если он остается тем же рейтинг не меняется так что этот метод не вызывается).

Вы можете разработать OnTouchListen:

ratingBar.setOnTouchListener(new OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_UP) { 
        float touchPositionX = event.getX(); 
        float width = ratingBar.getWidth(); 
        float starsf = (touchPositionX/width) * 5.0f; 
        int stars = (int) starsf + 1; 

        DecimalFormat decimalFormat = new DecimalFormat("#.#"); 
        curRate = Float.valueOf(decimalFormat.format((curRate 
          * count + starsf) 
          /++count)); 
        Toast.makeText(InteractiveRatingBarActivity.this, 
          "New Rating: " + curRate, Toast.LENGTH_SHORT) 
          .show(); 
        setRatingBar.setRating(curRate); 
        countText.setText(count + " Ratings"); 
        v.setPressed(false); 
       } 
       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        v.setPressed(true); 
       } 

       if (event.getAction() == MotionEvent.ACTION_CANCEL) { 
        v.setPressed(false); 
       } 

       return true; 
      } 
     }); 
+0

Спасибо. Ваш ответ очень полезен. – Noufal

Смежные вопросы