2016-06-09 16 views
1

Ich versuche, eine scrollView einzurichten, wo ich eine Grid layout mit wenigen rating bars drin habe. Wenn ich auf diese klicke/berühre, wird der avarége-Wert an ein finales Rating Bar gesendet, das sich außerhalb der scrollView befindet.Android Studio - RatingBar setOnTouchListener funktioniert nicht richtig

Alles funktioniert aber, jeder ratingbar muss zweimal geklickt/berührt werden, um seinen Wert zu senden.

Irgendeine Idee, warum ist das passiert? Wenn ich die grid layout außerhalb vom scrollView die rating bars wie erwartet bewegen (auf einen Klick/touch)

Layout

der Kodex Ich bin mit dem Wert von rating bar senden ist:

Valutazione[0].setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        onClickRate1(); 
        return false; 
       } 
      }); 

      Valutazione[1].setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        onClickRate1(); 
        return false; 
       } 
      }); 

      Valutazione[2].setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        onClickRate1(); 
        return false; 
       } 
      }); 

.... 

public void onClickRate1() 
    { 

     RatingBar Valutazione[] = 
       {(RatingBar) findViewById(R.id.ratingBar1), (RatingBar) findViewById(R.id.ratingBar2), 
         (RatingBar) findViewById(R.id.ratingBar3), (RatingBar) findViewById(R.id.ratingBar4), 
         (RatingBar) findViewById(R.id.ratingBar5), (RatingBar) findViewById(R.id.ratingBar6), 
         (RatingBar) findViewById(R.id.ratingBar7), (RatingBar) findViewById(R.id.ratingBar8), 
         (RatingBar) findViewById(R.id.ratingBar9), (RatingBar) findViewById(R.id.ratingBar10) 
       }; 
     RatingBar rateTot =(RatingBar) findViewById(R.id.ratingBartot); 

     float Valore[]={0,1,2,3,4,5,6,7,8,9, 10}; 
     Valore[0]=0;Valore[1]=0; 
     Valore[2]=0;Valore[3]=0; 
     Valore[4]=0;Valore[5]=0; 
     Valore[6]=0;Valore[7]=0; 
     Valore[8]=0;Valore[9]=0; 
     Valore[10]=0; 

     int j=0, divisore=0; 

     TextView finalResult = (TextView) findViewById(R.id.textrate); 


     while(j<=9) { 

      Valore[j] = Valutazione[j].getRating(); 

      if(Valore[j] > 0) divisore++; 

      j++; 
     } 

     Valore[10] = (Valore[0] + Valore[1] + Valore[2] + Valore[3] + Valore[4] + Valore[5] + Valore[6] + Valore[7] + Valore[8] + Valore[9])/divisore; 


     totalRating(rateTot, Valore[10], finalResult); 

    } 



    private void totalRating(RatingBar totalBar, float valoreTotale, TextView totalText) { 

     totalBar.setRating(valoreTotale); 
} 

Antwort

0

Anstelle von setOnTouchListenersetOnRatingBarChangeListener verwenden.

1) importieren android.widget.RatingBar.OnRatingBarChangeListener;

dann:

Valutazione[0].setOnRatingBarChangeListener(new OnRatingBarChangeListener() { 
      @Override 
      public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 

       onClickRate1(); 
      } 

     }); 
Verwandte Themen