package ua.kpi.ecampus.ui.adapter; import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.RatingBar; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import ua.kpi.ecampus.R; import ua.kpi.ecampus.model.Rating; /** * RateAdapter manages Rating data model and adapts it to * list, which is in RateTeacherActivity. * <p> * Created by Administrator on 08.06.2016. * // */ public class RateAdapter extends ArrayAdapter<Rating> { private List<Rating> mData = new ArrayList<>(); private Context mContext; private int mResourceId; private RatingBar.OnRatingBarChangeListener listener( final ViewHolder holder, final int position) { return (ratingBar, v, b) -> { Rating item = getItem(position); item.setRatingStar(v); }; } public RateAdapter(Context context, int resource, List<Rating> objects) { super(context, resource, objects); mContext = context; mResourceId = resource; mData = objects; } @Override public Rating getItem(int position) { return mData.get(position); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); if (convertView == null) { convertView = inflater.inflate(mResourceId, parent, false); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.ratingBar.setOnRatingBarChangeListener(listener (holder, position)); holder.ratingBar.setTag(position); holder.ratingBar.setRating(getItem(position).getRatingStar()); holder.tvCriterion.setText(getItem(position).getCriterion()); return convertView; } /** * Check whether teacher is rated by all criteria. * * @return true if rated completely, false otherwise */ public boolean teacherIsRated() { for (Rating r : mData) if (Float.compare(r.getRatingStar(), 1) < 0) return false; return true; } public List<Rating> getData() { return mData; } protected class ViewHolder { @Bind(R.id.tv_criterion) TextView tvCriterion; @Bind(R.id.rating_bar) RatingBar ratingBar; public ViewHolder(View itemView) { ButterKnife.bind(this, itemView); } } }