2017-06-30 9 views
-1

私は4つの評価バー(それぞれ4つの星がある)を持つプロジェクトで作業しています。すべての評価バーから組み合わせた「星」。私は今、値を追加しようとしていますが、それでもうまくいきません。すべての値を合計して、すべての評価で設定可能な値の数を制限できるようにします。複数の評価バーの値を取得し、使用できる星の数に制限を設定する

FragmentRatings.java:

`public class FramentRatings extends Fragment{ 
    RatingBar rbStrength, rbIntellect, rbWisdom, rbDexterity; 
    TextView tvPointSpent; 
    float pointsS, pointsI, pointsW, pointsD, total; 

    private SharedPreferences prefs; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_ratings, container, false); 

     rbStrength = (RatingBar)view.findViewById(R.id.strengthRating); 
     rbIntellect = (RatingBar)view.findViewById(R.id.intellectRating); 
     rbWisdom = (RatingBar)view.findViewById(R.id.wisdomRating); 
     rbDexterity = (RatingBar)view.findViewById(R.id.dexterityRating); 


     tvPointSpent = (TextView)view.findViewById(R.id.tvPointsSpend); 

     rbStrength.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
      @Override 
      public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
       tvPointSpent.setText(""+rbStrength.getRating()); 
       pointsS = rbStrength.getRating(); 
      } 
     }); 

     rbIntellect.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
      @Override 
      public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
       //tvPointSpent.setText(""+rbIntellect.getRating()); 
       pointsI = rbIntellect.getRating(); 
      } 
     }); 

     rbWisdom.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
      @Override 
      public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
       //tvPointSpent.setText(""+rbStrength.getRating()); 
       pointsW = rbWisdom.getRating(); 
      } 
     }); 

     rbDexterity.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 
      @Override 
      public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 
       //tvPointSpent.setText(""+rbStrength.getRating()); 
       pointsD = rbDexterity.getRating(); 
      } 
     }); 

     total = pointsD + pointsI + pointsS + pointsW; 

     tvPointSpent.setText(""+pointsS); 

     return view; 
    } 
}` 

fragment_ratings.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
     android:id="@+id/tvStrength" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/strengthRating" 
     android:layout_marginEnd="59dp" 
     android:layout_marginRight="59dp" 
     android:layout_toLeftOf="@+id/strengthRating" 
     android:layout_toStartOf="@+id/strengthRating" 
     android:text="Strength:" 
     android:textSize="30sp" /> 

    <TextView 
     android:id="@+id/tvIntellect" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/tvStrength" 
     android:layout_alignStart="@+id/tvStrength" 
     android:layout_alignTop="@+id/intellectRating" 
     android:text="Intellect:" 
     android:textSize="30sp" /> 

    <TextView 
     android:id="@+id/tvWisdom" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/tvIntellect" 
     android:layout_alignStart="@+id/tvIntellect" 
     android:layout_alignTop="@+id/wisdomRating" 
     android:text="Wisdom:" 
     android:textSize="30sp" /> 

    <RatingBar 
     android:id="@+id/strengthRating" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="141dp" 
     android:layout_marginRight="141dp" 
     android:layout_marginTop="61dp" 
     android:numStars="4" 
     android:rating="0" 
     android:stepSize="1.0" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

    <RatingBar 
     android:id="@+id/intellectRating" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/strengthRating" 
     android:layout_alignStart="@+id/strengthRating" 
     android:layout_below="@+id/strengthRating" 
     android:layout_marginTop="58dp" 
     android:numStars="4" 
     android:rating="0" 
     android:stepSize="1.0" /> 

    <RatingBar 
     android:id="@+id/wisdomRating" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/intellectRating" 
     android:layout_alignStart="@+id/intellectRating" 
     android:layout_below="@+id/intellectRating" 
     android:layout_marginTop="61dp" 
     android:numStars="4" 
     android:rating="0" 
     android:stepSize="1.0" /> 

    <RatingBar 
     android:id="@+id/dexterityRating" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignEnd="@+id/wisdomRating" 
     android:layout_alignRight="@+id/wisdomRating" 
     android:layout_below="@+id/wisdomRating" 
     android:layout_marginTop="66dp" 
     android:numStars="4" 
     android:rating="0" 
     android:stepSize="1.0" /> 

    <TextView 
     android:id="@+id/tvDexterity" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/tvIntellect" 
     android:layout_alignStart="@+id/tvIntellect" 
     android:layout_alignTop="@+id/dexterityRating" 
     android:text="Dexterity:" 
     android:textSize="30sp" /> 

    <TextView 
     android:id="@+id/tvPoints" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/tvDexterity" 
     android:layout_alignStart="@+id/tvDexterity" 
     android:layout_below="@+id/dexterityRating" 
     android:layout_marginTop="62dp" 
     android:text="Points left to spend: " 
     android:textSize="30sp" /> 

    <TextView 
     android:id="@+id/tvPointsSpend" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/tvPoints" 
     android:layout_marginLeft="30dp" 
     android:layout_marginStart="30dp" 
     android:layout_toEndOf="@+id/tvPoints" 
     android:layout_toRightOf="@+id/tvPoints" 
     android:text="10" 
     android:textSize="30sp" /> 


</RelativeLayout> 

Picture of the rating bars

+0

Android開発者ではありませんが、前後に撮影するonChangingイベントはないようです。だから私はおそらくあなたの統計のそれぞれの "現在"の値を作成することです。たとえば、強度を変更してcurrentWisdom + currentIntellect + currentDexterity + rbStrength.getRating()を取得し、10より大きい場合は次のいずれかを行います。a)rbStrength.setRating(currentStrength)// resetまたはb)rbStrength.setRating (10 - currentWisdom - currentIntellect - currentDexterity)//残り最大値は設定できます。それが<= 10の場合、currentStrength = rbStrength.getRating() – Robert

答えて

0

が間違ったロジックを得たが、すべきではないラインがあるとします。

tvPointSpent.setText( "" + poin tsS);

こと:

tvPointSpent.setText(String.valueOf)(合計)。

関連する問題