2012-11-23 14 views
9

Reytingi tıklamakla ilgili bir sorunum var gibi görünüyor. Derecelendirme çubuğu, yalnızca iyi görünüyor ve varsayılan değere sahip. Tek sorun, herhangi bir değeri değiştiremem ya da etkin değil. Çok farklı şeyleri denedim (örneğin, mizanpajı etkinleştirme, tamamen java'da inşa etme). Hiçbirinin bir etkisi yok gibi görünüyor. İşte en son derecelendirme çubuğunun enkarnasyonu. Tıklamayı yakalayamamak için stooopid bir şey yapmalıyım.Capture RatingBar Click

Java Kodu:

RatingBar showRatingBar = (RatingBar) findViewById(R.id.showRatingBar); 
    showRatingBar.setEnabled(true); 
    showRatingBar.setClickable(true); 
    showRatingBar.setRating(0); 
    showRatingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener(){ 
     @Override 
     public void onRatingChanged(RatingBar ratingBar, float rating, 
       boolean fromUser) { 
      System.out.println("showRating.buildRatingBar: " +rating); 
      ratingBar.setRating(rating); 

     }}); 
    showRatingBar.refreshDrawableState(); 

Düzen:

  <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/showQualityLabel" 
      android:layout_width="100dp" 
      android:layout_height="wrap_content" 
      android:text="@string/show_rating_label" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textColor="#E6E6E6" 
      android:textSize="12sp" /> 

     <RatingBar 
      android:id="@+id/showRatingBar" 
      style="?android:attr/ratingBarStyleSmall" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:max="5" 
      android:numStars="5" 
      android:rating="0" 
      android:stepSize="1"/> 
    </LinearLayout> 

şimdiden teşekkürler.

Craig

cevap

26

setOnClickListener() çalışmıyor RatingBar onTouchEvent() geçersiz kılar ve View # performClick() asla denir böylece View (OnClickListener denilen olurdu), icabına asla izin olmasıdır.

RatingBar türetilen ve()

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; 
        ratingBar.setRating(stars); 

        Toast.makeText(MainActivity.this, String.valueOf("test"), Toast.LENGTH_SHORT).show();     
        v.setPressed(false); 
       } 
       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        v.setPressed(true); 
       } 

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




       return true; 
      }}); 
+2

Maalesef hiç şans onTouchEvent geçersiz kılar. Tıklamalarımı veya derecelendirmelerdeki herhangi bir değişikliği tanımak için hala hiçbir şey alamıyorum. Garip?!?! – mornindew

+0

Bunu yapmanın bir yolunu buldum, bunu deneyin :) – Talha

+0

Nice !!! Tam olarak buydu. Anahtar, onTouch işleviydi. Çok teşekkür ederim. – mornindew