javaandroidratingbar

Rating Bar not appearing


I am trying to use a rating bar in Android Studio but it just isn't appearing in my app. I am not receiving any errors and can't understand what I am doing wrong. Has anyone else experienced this issue?

Here is my java file;

    package com.example.myopenlounge;

    import androidx.appcompat.app.AppCompatActivity;

    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RatingBar;
    import android.widget.TextView;
    import android.widget.Toast;

    import com.google.firebase.analytics.FirebaseAnalytics;

    public class RatingActivity extends AppCompatActivity {

    private RatingBar mRatingBar;
    private TextView mRatingScale;
    private EditText mFeedback;
    private Button mSendFeedback;
    private int star1 = 0;
    private int star2 = 0;
    private int star3 = 0;
    private int star4 = 0;
    private int star5 = 0;

    public static final String TAG = "TAG";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_rating);

    mRatingBar = (RatingBar) findViewById(R.id.ratingBar);
    mRatingScale = (TextView) findViewById(R.id.tvRatingScale);
    mFeedback = (EditText) findViewById(R.id.etFeedback);
    mSendFeedback = (Button) findViewById(R.id.btnSubmit);

    mRatingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
        @Override
        public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
            mRatingScale.setText(String.valueOf(rating));
            switch((int) ratingBar.getRating()){
                case 1:
                    mRatingScale.setText("Awful!");
                    star1++;
                    break;
                case 2:
                    mRatingScale.setText("Not great...");
                    star2++;
                    break;
                case 3:
                    mRatingScale.setText("Good");
                    star3++;
                    break;
                case 4:
                    mRatingScale.setText("Great");
                    star4++;
                    break;
                case 5:
                    mRatingScale.setText("Fantastic!");
                    star5++;
                    break;
                default:
                    mRatingScale.setText("");
            }
        }
    });

    mSendFeedback.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(mFeedback.getText().toString().isEmpty()){
                Toast.makeText(RatingActivity.this, "Please fill in feedback text box", 
             Toast.LENGTH_LONG).show();
            }
            else{
                mFeedback.setText("");
                mRatingBar.setRating(0);
                Toast.makeText(RatingActivity.this, "Thank you for sharing your feedback :) ", 
             Toast.LENGTH_SHORT).show();
            }
        }
    });

       }
       }

and then my xml file looks like this;

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".RatingActivity"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="center_horizontal"
        android:text="We hope you enjoyed your meal with us today"
        android:textSize="18sp"
        android:textStyle="italic" />

    <RatingBar
        android:id="@+id/ratingBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numStars="5"
        android:stepSize="1"
        android:rating="5"/>

    <TextView
        android:id="@+id/tvRatingScale"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="10dp"
        android:text="Awesome. I love it"
        android:textSize="16sp"
        android:textStyle="bold"/>

    <EditText
        android:id="@+id/etFeedback"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:lines="5"
        android:hint="Tell us a little about why you have given us this rating"
        android:gravity="top" />

    <Button
        android:id="@+id/btnSubmit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="#e57373"
        android:text="Send feedback"
        android:textColor="@android:color/white" />

    <TextView
            android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        tools:layout_editor_absoluteX="17dp"
        tools:layout_editor_absoluteY="46dp" />

    </LinearLayout>

The text "We hope you enjoyed your meal with us today" is all that appears on the screen when the onCreate method is called. I can't seem to find a reason why.


Solution

  • This is because you sets orientation horizontal

    android:orientation="horizontal"
    

    you need to update it to vertical

    android:orientation="vertical"
    

    Here is your updated xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".RatingActivity"
        android:orientation="vertical">
    
    
    <TextView
            android:id="@+id/textView2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center_horizontal"
            android:text="We hope you enjoyed your meal with us today"
            android:textSize="18sp"
            android:textStyle="italic" />
    
        <RatingBar
            android:id="@+id/ratingBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5"
            android:stepSize="1"
            android:rating="5"/>
    
        <TextView
            android:id="@+id/tvRatingScale"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="10dp"
            android:text="Awesome. I love it"
            android:textSize="16sp"
            android:textStyle="bold"/>
    
        <EditText
            android:id="@+id/etFeedback"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textMultiLine"
            android:lines="5"
            android:hint="Tell us a little about why you have given us this rating"
            android:gravity="top" />
    
        <Button
            android:id="@+id/btnSubmit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:background="#e57373"
            android:text="Send feedback"
            android:textColor="@android:color/white" />
    
        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView"
            tools:layout_editor_absoluteX="17dp"
            tools:layout_editor_absoluteY="46dp" />
    
    </LinearLayout>