2012-11-23 2 views
9

をクリックRatingBarキャプチャします。レーティングバーは正常に表示されており、デフォルト値を持っています。唯一の問題は、私が値を変更することができない、または有効になっていないということです。私は数多くの異なることを試しました(レイアウトで有効にする、Javaで完全に構築するなど)。いずれも影響を与えていないようです。ここに私の最新の評価バーの化身があります。私はクリックをキャプチャすることができないために何かstooopidをしなければならない。は、私は私のratingbarクリックを引くに問題があるように見える

Javaコード:

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(); 

レイアウト:

  <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> 

は、事前にありがとうございます。

クレイグ

答えて

26

setOnClickListener()に動作していないRatingBarはonTouchEvent()をオーバーライドし、ビュー#performClick()が呼び出されることはありませんので、ビュー(OnClickListenerと呼ばれていると思われる)、それの世話をさせたことがないということです。

がRatingBarから派生し、()

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

残念ながら運をonTouchEventを上書きしません。私はまだクリック数やレーティングの変化を認識することはできません。奇妙な?!?! – mornindew

+0

私はそれを行う方法を見つけた、それを試してください:) – Talha

+0

ニース!!!それはまさにそれでした。キーはonTouch機能でした。どうもありがとうございました。 – mornindew

関連する問題