【发布时间】:2017-08-15 09:57:33
【问题描述】:
在我的 Android 应用中,我有一个显示 RatingBar 的 Fragment,它有一个 onRatingChanged 侦听器,它不响应 ratingbar 的变化。
这是我的代码:
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 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() 方法被调用。
当前行为:即使我更改了小部件中的星星,也没有任何反应。
【问题讨论】:
-
您可以在
onCreateView()方法中添加initialize()方法并尝试一下。 -
@KeLiuyue 我试过了,但并没有改变情况:(
-
嗨 Gio G.,我用你的代码试了一下。它成功了。你可以检查一下。只需在
onCreateView()中添加initialize()方法。 -
您好,KeLiuyue,我已经应用了更改,但正如我之前告诉您的那样,没有任何反应。我也在 Logcat
W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed中看到了这一点。会不会是问题? -
你好 Gio G.,我又编辑了。你可以试一试。
标签: java android ratingbar listeners