java - Android RatingBar onRatingChanged doesn't get called -
in android app i've got fragment showing ratingbar, has onratingchanged listener not responding ratingbar changes.
so here's code:
rating_fragment.xml
<android.support.v7.widget.cardview xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rating_fragment" android:layout_width="match_parent" android:layout_height="wrap_content"> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <ratingbar android:id="@+id/rating_fragment_ratingbar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:stepsize="1" /> <edittext android:layout_margintop="16dp" android:id="@+id/rating_fragment_whatswrong" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="@string/rating_fragment_whatswrong" android:layout_gravity="center_horizontal" android:visibility="gone" tools:visibility="visible" /> </linearlayout> </android.support.v7.widget.cardview> ratingfragment.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 new alertdialog.builder alertdialog.builder builder = new alertdialog.builder(getcontext()); // layout inflater layoutinflater layoutinflater = getactivity().getlayoutinflater(); rootview = layoutinflater.inflate(r.layout.rating_fragment,null); // inflate 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); } } expected behavior: onratingchanged() method gets invoked.
current behavior: if change stars in widget, nothing happens.
try this.
@nonnull @override public dialog oncreatedialog(bundle savedinstancestate) { // create new alertdialog.builder alertdialog.builder builder = new alertdialog.builder(getcontext()); // layout inflater layoutinflater layoutinflater = getactivity().getlayoutinflater(); rootview = layoutinflater.inflate(r.layout.rating_fragment, null); // inflate 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 + ""); } }); }
Comments
Post a Comment