Android listview中的分级栏

Android listview中的分级栏,android,listview,Android,Listview,当我们在android中向下滚动时,评级栏被重置,我需要将评级反馈的响应发送到服务器,但当我在android的listview中向下滚动时,评级栏将重置或不保存 public class FacultyListAdapter extends BaseAdapter { private final Context context; public FacultyListAdapter(Context context) { this.cont

当我们在android中向下滚动时,评级栏被重置,我需要将评级反馈的响应发送到服务器,但当我在android的listview中向下滚动时,评级栏将重置或不保存

public class FacultyListAdapter extends BaseAdapter {
        private final Context context;

        public FacultyListAdapter(Context context) {

            this.context = context;

            if (!facultylist.isEmpty())
                courseEmptyLayout.setVisibility(LinearLayout.GONE);
        }


        @Override
        public View getView(final int position, View convertView,
                            ViewGroup parent) {
            final ViewHolder TabviewHolder;


            if (convertView == null) {

                TabviewHolder = new ViewHolder();


                LayoutInflater inflater = getLayoutInflater();

                convertView = inflater.inflate(R.layout.list_item_feedback,
                        parent, false);

                TabviewHolder.FacultyName = (TextView) convertView.findViewById(R.id.FacultyName);//facultyname

                TabviewHolder.rating = (RatingBar) convertView.findViewById(R.id.rating);//rating starts
                TabviewHolder.Submit = (Button) convertView.findViewById(R.id.btnSubmit);

                // Save the holder with the view
                convertView.setTag(TabviewHolder);
            } else {


                TabviewHolder = (ViewHolder) convertView.getTag();
            }


            final Faculty mFac = facultylist.get(position);//*****************************NOTICE
            TabviewHolder.FacultyName.setText(mFac.getEmployeename());
            TabviewHolder.rating.setTag(position);
            TabviewHolder.rating.setRating(mFac.getRatingStar());
            //   TabviewHolder.ModuleName.setText(mFac.getSubject());



            TabviewHolder.rating.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
                public void onRatingChanged(RatingBar ratingBar, float rating,
                                            boolean fromUser) {

                    feedbackresult =String.valueOf(rating);

                    TabviewHolder.rating.setRating(Float.parseFloat(feedbackresult));
                    Log.d("feedback","feedback is: "+ feedbackresult);

                }
            });


            return convertView;
        }

        /*private RatingBar.OnRatingBarChangeListener onRatingChangedListener(final ViewHolder holder, final int position) {
            return new RatingBar.OnRatingBarChangeListener() {
                @Override
                public void onRatingChanged(RatingBar ratingBar, float v, boolean b) {
                    FacultyName item = getItem(position);
                    item.setRatingStar(v);
                    Log.i("Adapter", "star: " + v);
                }
            };
        }*/

        @Override
        public int getCount() {
            return facultylist.size();
        }

        @Override
        public Object getItem(int position) {return facultylist.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }
    }

Listview和recyclerview根据滚动时传递给它的列表自动刷新(重新创建)视图

你必须将你的评分存储到你的列表中(我认为它是facultylist),其中包含所有详细信息

当用户单击评级时,您需要将评级存储到特定索引。然后,您的列表视图根据列表中的值显示正确的评级。

请参阅此链接

公共类反馈适配器扩展BaseAdapter{
静态语境;
列表行;
视窗座;
公共反馈适配器(上下文,列表行)
{
this.context=上下文;
this.row=行;
}
私有类视窗持有者{
TextView tv\u slno、tv\u产品名称、tv\u时间;
额定杆rb_额定值;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
LayoutInflater mInflater=(LayoutInflater)context.getSystemService(Activity.LAYOUT\u INFLATER\u SERVICE);
if(convertView==null)
{
convertView=mInflater.inflate(R.layout.custom\u feedback\u row\u格式,父级,false);
holder=新的ViewHolder();
holder.tv\u slno=(TextView)convertView.findViewById(R.id.tv\u slno);
holder.tv_time=(TextView)convertView.findViewById(R.id.tv_time);
holder.tv\u产品名=(TextView)convertView.findViewById(R.id.tv\u产品名);
holder.rb_productrating=(RatingBar)convertView.findViewById(R.id.rb_productrating);
convertView.setTag(支架);
}否则
{
holder=(ViewHolder)convertView.getTag();
}
holder.rb_productrating.setOnRatingBarChangeListener(onRatingChangedListener(holder,position));
支架.rb_productrating.setTag(位置);
holder.tv_slno.setText(String.valueOf(位置+1));
holder.tv_time.setText(getItem(position.gettime());
holder.tv\u productname.setText(getItem(position).getproductsName());
浮动评级=float.valueOf(getItem(position).getrating());
持有人。rb_产品评级。设定评级(评级);
返回视图;
}
private RatingBar.OnRatingBarChangeListener onRatingChangedListener(最终视图持有者,最终整型位置)
{
返回新的RatingBar.OnRatingBarChangeListener(){
@凌驾
公共无效率已更改(率条率条、浮动率条、布尔b)
{
FeedbackRowDetails项=行获取(位置);
int roundoff_rating=(int)Math.round(rating);
额定值设定(四舍五入额定值);
项目.设置等级(字符串.值(舍入等级));
}
};
}
@凌驾
public int getCount(){
返回row.size();
}
@凌驾
公共反馈行详细信息getItem(内部位置)
{
返回行。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回row.indexOf(getItem(position));
}
}

将您的评级条值保存在模态类中,然后从模态移除条件中获取该值
如果(convertView==null)
,则应该可以做到这一点
public class FeedbackAdapter extends BaseAdapter {

    static Context context;
    List<FeedbackRowDetails> row;
    ViewHolder holder;
    public FeedbackAdapter(Context context,List<FeedbackRowDetails> row)
    {
        this.context = context;
        this.row =row;
    }

    private class ViewHolder {
        TextView tv_slno, tv_productname, tv_time;
        RatingBar rb_productrating;

    }

    @Override
    public View getView( final int position, View convertView, ViewGroup parent) {

        LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) 
        {

            convertView = mInflater.inflate(R.layout.custom_feedback_row_format,parent, false);
            holder = new ViewHolder();
            holder.tv_slno = (TextView) convertView.findViewById(R.id.tv_slno);
            holder.tv_time = (TextView) convertView.findViewById(R.id.tv_time);
            holder.tv_productname = (TextView) convertView.findViewById(R.id.tv_productname);
            holder.rb_productrating=(RatingBar) convertView.findViewById(R.id.rb_productrating);
            convertView.setTag(holder);

        } else
        {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.rb_productrating.setOnRatingBarChangeListener(onRatingChangedListener(holder, position));
        holder.rb_productrating.setTag(position);

        holder.tv_slno.setText(String.valueOf(position + 1));
        holder.tv_time.setText(getItem(position).gettime());

        holder.tv_productname.setText(getItem(position).getproductsName());
        float rating=Float.valueOf(getItem(position).getrating());

        holder.rb_productrating.setRating(rating);

        return convertView;

    }

      private RatingBar.OnRatingBarChangeListener onRatingChangedListener(final ViewHolder holder, final int position) 
      {
            return new RatingBar.OnRatingBarChangeListener() {
                @Override
                public void onRatingChanged(RatingBar ratingBar, float rating, boolean b) 
                {

                    FeedbackRowDetails item = row.get(position);
                    int roundoff_rating = (int)Math.round(rating);                  
                    ratingBar.setRating(roundoff_rating);
                    item.setrating(String.valueOf(roundoff_rating));

                }
            };
        }
    @Override
    public int getCount() {
        return row.size();
    }

    @Override
    public FeedbackRowDetails getItem(int position) 
    {
        return row.get(position);
    }

    @Override
    public long getItemId(int position) {
        return row.indexOf(getItem(position));
    }

}