2012-11-23 10 views
9

Ich habe ein Problem mit dem Erfassen meiner Bewertungsleiste klicken. Die Bewertungsleiste wird gut angezeigt und hat den Standardwert. Das einzige Problem ist, dass ich keine Werte ändern kann oder es nicht aktiviert ist. Ich habe viele verschiedene Dinge ausprobiert (z. B. im Layout aktivieren, es komplett in Java erstellen). Keiner von ihnen scheint eine Auswirkung zu haben. Hier ist meine neueste Inkarnation der Bewertungsleiste. Ich muss etwas stooopid tun, um den Klick nicht erfassen zu können.Capture RatingBar Klicken Sie auf

Java-Code:

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

Layout:

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

Vielen Dank im Voraus.

Craig

Antwort

26

setOnClickListener() nicht funktioniert, ist, dass Bewertungsleiste überschreibt onTouchEvent() und nie anzeigen lassen darum kümmern, so View # Perform() nie aufgerufen wird (was der OnClickListener genannt hätte).

ergeben sich aus Bewertungsleiste und außer Kraft setzen onTouchEvent()

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

Leider kein Glück. Ich kann immer noch nichts erkennen, um meine Klicks oder Änderungen der Bewertungen zu erkennen. Seltsam?!?! – mornindew

+0

Ich habe einen Weg gefunden, das zu tun, versuchen Sie es :) – Talha

+0

Nizza !!! Das war es genau. Der Schlüssel war die OnTouch-Funktion. Vielen Dank. – mornindew