有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android RatingBar onRatingChanged不会被调用

在我的Android应用程序中,有一个片段显示了一个RatingBar,其中有一个onRatingChanged监听器,它不响应RatingBar的更改

下面是我的代码:

评级_片段。xml

<安卓.support.v7.widget.CardView
xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:id="@+id/rating_fragment"
安卓:layout_width="match_parent"
安卓:layout_height="wrap_content">

<LinearLayout
    安卓:layout_width="match_parent"
    安卓:layout_height="wrap_content"
    安卓:orientation="vertical">


    <RatingBar
        安卓:id="@+id/rating_fragment_ratingbar"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:layout_gravity="center_horizontal"
        安卓:stepSize="1"
        />

    <EditText
        安卓:layout_marginTop="16dp"
        安卓:id="@+id/rating_fragment_whatswrong"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:hint="@string/rating_fragment_whatswrong"
        安卓:layout_gravity="center_horizontal"
        安卓:visibility="gone"
        tools:visibility="visible"
        />

</LinearLayout>

</安卓.support.v7.widget.CardView>

分级片段。java

public class RatingFragment extends DialogFragment implements RatingBar.OnRatingBarChangeListener{

private static final String TAG = RatingFragment.class.getSimpleName();
private View rootView;
private EditText mWhatsWrong;

@NonNull
@Override
public Dialog onCreateDialog (Bundle savedInstanceState) {
    // Create a new AlertDialog.Builder
    AlertDialog.Builder builder = new AlertDialog.Builder(getContext());

    // Get the layout inflater
    LayoutInflater layoutInflater = getActivity().getLayoutInflater();
    rootView = layoutInflater.inflate(R.layout.rating_fragment,null);

    // Inflate the layout
    builder.setView(R.layout.rating_fragment);
    builder.setTitle(getString(R.string.rating_fragment_title));

    initialize();
    return builder.create();
}

@Nullable
@Override
public View onCreateView (LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.rating_fragment,container,false);
    return rootView;
}



private void initialize(){
    RatingBar ratingBar = (RatingBar) rootView.findViewById(R.id.rating_fragment_ratingbar);
    mWhatsWrong = (EditText) rootView.findViewById(R.id.rating_fragment_whatswrong);

    ratingBar.setOnRatingBarChangeListener(this);
}


@Override
public void onRatingChanged (RatingBar ratingBar, float rating, boolean fromUser) {
    Toast.makeText(getContext(), String.valueOf(rating), Toast.LENGTH_SHORT).show();

    if(rating < 4.0f){
        mWhatsWrong.setVisibility(View.VISIBLE);
    } else {
        mWhatsWrong.setVisibility(View.GONE);
    }
}

预期行为:调用onRatingChanged()方法

当前行为:即使我更改了小部件中的星号,也不会发生任何事情


共 (1) 个答案

  1. # 1 楼答案

    试试这个

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Create a new AlertDialog.Builder
        AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
    
        // Get the layout inflater
        LayoutInflater layoutInflater = getActivity().getLayoutInflater();
        rootView = layoutInflater.inflate(R.layout.rating_fragment, null);
    
        // Inflate the layout
        builder.setView(R.layout.rating_fragment);
        builder.setTitle(getString(R.string.rating_fragment_title));
        // edited here
        // initialize();
        return builder.create();
    }
    
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.rating_fragment, container, false);
        // edited here,add initialize() method
        initialize();
        return rootView;
    }
    
    
    private void initialize() {
        // edited here,add log info
        Log.e("RatingBar", "initialize start");
        RatingBar ratingBar = (RatingBar) rootView.findViewById(R.id.rating_fragment_ratingbar);
        mWhatsWrong = (EditText) rootView.findViewById(R.id.rating_fragment_whatswrong);
    
        // edited here
        ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float rating, boolean b) {
    
                if (rating < 4.0f) {
                    mWhatsWrong.setVisibility(View.VISIBLE);
                } else {
                    mWhatsWrong.setVisibility(View.GONE);
                }
    
                Log.e("RatingBar", rating + "");
            }
        });
    }