Ich arbeite an RecyclerView, wo ich ratindBar auf meine Ansichten habe. Problem ist, dass, wenn ich nach unten scrolle, mein RatingBar-Listener immer wieder anruft. Ich stelle unten einen Adapterklassencode zur Verfügung. Ich habe eine Methode, die mehrere Male aufruft, wenn ich scrolle, in der Tat muss es nur Anruf sein, wenn ich Bewertungsleiste berühre.RatingBar Listener ruft beim Scrollen Recycler View
Vielen Dank im Voraus.
public class Order_Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Filterable {
public void setiCartListener(ICart iCartListener) {
this.iCartListener = iCartListener;
}
private OnItemClickListener onItemClickListener;
@Override
public int getItemViewType(int position) {
if (isPositionFooter(position)) {
return VIEW_TYPE_LOADING;
}else if(filter.equals("") && position == 0 && isWorkshop){
ParseObject parseObject = arrayList.get(0);
if(parseObject.has("isBanner")&& parseObject.getBoolean("isBanner")== true){
return TYPE_HEADER;
}
}
return VIEW_TYPE_ITEM;
}
private boolean isPositionFooter(int position) {
return position == arrayList.size();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.order_view_list, parent, false);
return new MemberViewHolder(view, onItemClickListener);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
final ParseObject parseObject = arrayList.get(position);
final CartUtils cartUtils = cartUtilsItemsList.get(position);
if(holder instanceof MemberViewHolder){
if (arrayList.size() > 0) {
// ---------------- Rating Block Start -----------------
((MemberViewHolder) holder).ratingBar.setEnabled(true);
RatingBar.OnRatingBarChangeListener l=
new RatingBar.OnRatingBarChangeListener() {
public void onRatingChanged(RatingBar ratingBar,
float rating, boolean fromTouch) {
// This method is calling again and again when I am scrolling
dialogBoxRating(parseObject,rating);
}
};
((MemberViewHolder) holder).ratingBar.setOnRatingBarChangeListener(l);
// Listeners Block End
}
}
}
public void dialogBoxRating(final ParseObject pObject, final double ratingStar){
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int choice) {
switch (choice) {
case DialogInterface.BUTTON_POSITIVE:
Toast.message("saved");
break;
case DialogInterface.BUTTON_NEGATIVE:
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(R.string.do_you_want_to_save_the_rating).setTitle(R.string.cancel)
.setPositiveButton(R.string.yes, dialogClickListener)
.setNegativeButton(R.string.no, dialogClickListener).show();
}
@Override
public int getItemCount() {
return arrayList == null ? 0 : arrayList.size();
}
static class MemberViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
RatingBar ratingBar;
public MemberViewHolder(View itemView, OnItemClickListener onItemClickListener) {
super(itemView);
ratingBar= (RatingBar) itemView.findViewById(R.id.ratingBar);
itemView.setOnClickListener(this);
this.onItemClickListener = onItemClickListener;
}
@Override
public void onClick(View v) {
}
}
}