2016-12-29 32 views
0

當我們在android中向下滾動時,評級欄會被重置,我需要向服務器發送評級反饋的響應,但是當我在android中的listview中向下滾動時,它會重置或不保存。在列表視圖中的Ratingbar

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; 
     } 
    } 
+1

保存您的評價欄值在你的模式類,然後從你的語氣 –

+0

得到它嘗試刪除條件'如果(convertView == NULL)',是應該做的伎倆 – Redman

回答

0

ListView和recyclerview自動刷新(重新創建)基於您滾動時傳遞給它的列表視圖。

您必須將您的評級存入您的清單<>(我認爲它是facultylist),其中包含所有細節。

當用戶點擊評分時,您需要將評分存儲到特定索引。然後你的列表視圖根據列表中的值顯示正確的評分。

0

參考此鏈接Rating Bar in ListView Android

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)); 
    } 

}