繁体   English   中英

如何在Recyclerview中访问评级栏的评级

[英]How to access rating bar's rating in recyclerview

我正在使用页脚使用卡片视图和回收者视图。 这是带有textview的调查表,显示问题和评分栏。 将有多个问题,并且页脚将包含文本区域和提交按钮。 我试图通过单击“提交”按钮来获得评分栏的评分,但是我正在获取recyclerview的最后一张卡片视图的评分。 以下是我用来获得评分的代码。 单击“提交”按钮时会调用submitResponse()方法,我正在编写代码以获取所有卡片视图的等级。

public class SurveyDetailsAdapter  extends  RecyclerView.Adapter<RecyclerView.ViewHolder>  {


private static final int FOOTER_VIEW = 1;
static List<SurveyQuestions> surveyQuestionses= new ArrayList<>();
public static Activity ctx;

public static ScheduleData scheduleData;
public static SurveyDetailsViewHolder vh;

public SurveyDetailsAdapter(List<SurveyQuestions> surveyQuestionses,Activity ctx,ScheduleData scheduleData) {
    this.surveyQuestionses = surveyQuestionses;
    this.ctx=ctx;
    this.scheduleData=scheduleData;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View v;

    if (viewType == FOOTER_VIEW) {
        v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_footer, parent, false);
        FooterViewHolder vh = new FooterViewHolder(v);
        return vh;
    }
    v = LayoutInflater.from(parent.getContext()).inflate(R.layout.survey_details_view_layout, parent, false);
    SurveyDetailsViewHolder pvh = new SurveyDetailsViewHolder(v);
    return pvh;

}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

   // holder.time.setText(String.valueOf(scheduleData.get(position).starttime+"-"+String.valueOf(scheduleData.get(position).endtime)));
  //  holder.title.setText(String.valueOf(scheduleData.get(position).title));
  //  holder.date.setText(String.valueOf(scheduleData.get(position).date));

    try {
        if (holder instanceof SurveyDetailsViewHolder) {
            vh = (SurveyDetailsViewHolder) holder;
            vh.question.setText(surveyQuestionses.get(position).question);

           // vh.bindView(position);


        } else if (holder instanceof FooterViewHolder) {
            FooterViewHolder vh = (FooterViewHolder) holder;

        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}



@Override
public int getItemCount() {
    if (surveyQuestionses == null) {
        return 0;
    }
    if (surveyQuestionses.size() == 0) {
        return 1;
    }

    return  surveyQuestionses.size()+1;
}

// Now define getItemViewType of your own.
@Override
public int getItemViewType(int position) {
    if (position ==surveyQuestionses.size()) {
        // This is where we'll add footer.
        return FOOTER_VIEW;
    }

    return super.getItemViewType(position);
}

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
}

public class FooterViewHolder extends RecyclerView.ViewHolder {
    EditText comments;
    MainActivity mainActivity = (MainActivity) ctx;


    public FooterViewHolder(final View itemView) {
        super(itemView);

        itemView.findViewById(R.id.submit).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Do whatever you want on clicking the item

                submitResponse();
                Toast.makeText(mainActivity.getApplicationContext(),"Thank you.", Toast.LENGTH_SHORT).show();
                mainActivity.switchContent(Surveys.FRAGMENT_TAG);
            }
        });
        }

    public void submitResponse(){

        comments=(EditText)itemView.findViewById(R.id.comments);

        List<String> rat= new ArrayList<String>();

        for(int i=0;i<surveyQuestionses.size();i++){
            rat.add(String.valueOf(SurveyDetailsViewHolder.ratingBar.getRating()));
        }

        for(int j=0;j<rat.size();j++){
            Toast.makeText(mainActivity.getApplicationContext(),rat.get(0).toString()+rat.get(1).toString()+rat.get(2).toString(), Toast.LENGTH_SHORT).show();
        }

    }

    }

// So you're done with adding a footer and its action on onClick.
// Now set the default ViewHolder for NormalViewHolder

public static class SurveyDetailsViewHolder extends RecyclerView.ViewHolder {
   public static CardView cv;
    TextView question;
    public static RatingBar ratingBar;
    SurveyDetailsViewHolder(View itemView) {
        super(itemView);

        cv = (CardView) itemView.findViewById(R.id.card_view_layout);
        question = (TextView) itemView.findViewById(R.id.que1);
        ratingBar = (RatingBar) itemView.findViewById(R.id.ratingBar);




    }
}
}

您有SurveyQuestion POJO。 添加您的POJO新的领域,你可以把它叫做评级

public class SurveyQuestion { 
    public float rating = 0.0f; //this will be default value, if user has not rate, this value will be passed
    // Your other variabes, constructors etc.
}

然后,您需要在RecyclerView Adapter上收听评分栏的变化

public static class SurveyDetailsViewHolder extends RecyclerView.ViewHolder {
public static CardView cv;
   TextView question;
   public static RatingBar ratingBar;

   SurveyDetailsViewHolder(View itemView) {
        super(itemView);
        cv = (CardView) itemView.findViewById(R.id.card_view_layout);
        question = (TextView) itemView.findViewById(R.id.que1);
        ratingBar = (RatingBar) itemView.findViewById(R.id.ratingBar);
        ratingBar .setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
        @Override
        public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
            surveyQuestionses.get(getPosition()).rating = ratingBar.getRating();
        }
    });

   }
}

最后,在您的submitResponse()方法上,您可以从surveyQuestionses列表中访问您的评分。

public void submitResponse(){

    comments=(EditText)itemView.findViewById(R.id.comments);

    List<String> rat= new ArrayList<String>();

    for(int i=0;i<surveyQuestionses.size();i++){
        rat.add(String.valueOf(surveyQuestionses.rating));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM