首页 > 解决方案 > 如何在下一个按钮功能上更新 recyclerview 中的索引

问题描述

这是recyclerview,我在其中选择选项并保存在活动中,但我只想选择一个选项,但它选择了多个这是问题,以及如何应用我在活动中处理的mainIndex,然后通知适配器。

   @Override
   public void onBindViewHolder(@NonNull final ExamQuestionViewHolder holder, int i) {

   final ExamQuestionsOptionsItem item = itemList.get(i);

   if (!TextUtils.isEmpty(item.getOption()) && item.getOption() != null){
    holder.tvOption.setText(item.getOption());
   }else {
        holder.tvOption.setText("");
    }
    holder.rlMain.setSelected(item.isSelected());

    holder.rlMain.setBackground(ContextCompat.getDrawable(context,
            item.isSelected() ? R.drawable.preference_bg_selected : R.drawable.rect_box_white));

    holder.rlMain.setAlpha(0.6f);

    holder.tvOption.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            holder.rlMain.performClick();
        }
    });

    holder.tvOption.setTextColor(ContextCompat.getColor(context,
            item.isSelected() ? R.color.colorPrimary : R.color.font_color));

选择选项

    holder.rlMain.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (!isClickable)return;
            holder.rlMain.setAlpha(0.6f);
            item.setSelected(!item.isSelected());

            holder.tvOption.setTextColor(ContextCompat.getColor(context,
                    item.isSelected() ? R.color.colorPrimary : R.color.font_color));

            holder.rlMain.setBackground(ContextCompat.getDrawable(context,
                    item.isSelected() ? R.drawable.preference_bg_selected : 
            R.drawable.rect_box_white));

            if (item.isSelected()){
                selectedOptionList.add(item.getOptionId());
            }else {
                if (selectedOptionList != null)
                selectedOptionList.remove(item.getOptionId());
            }
            if (selectedOptionList != null)
            selectedOptionListner.selectedOptionList(selectedOptionList);
           }
       });

     }

活动调用问题,答案选项出现在 recyclerview 中,问题出现在活动文本视图中

    protected void fetchQuestions() {
       viewsDisable();
    Call<ExamQuestionResponse> call = 
    ApiClient.getInstance().getMainApi().getExamQuestions(Util.getHeaderMap(token), examId);
    call.enqueue(new Callback<ExamQuestionResponse>() {
        @Override
        public void onResponse(Call<ExamQuestionResponse> call, Response<ExamQuestionResponse> 
            response) {
            viewsEnable();
            if (response.body() != null) {
                ExamQuestionResponse mResponse = response.body();
                if (mResponse.isStatus()) {
                    questionList = mResponse.getData();
                    if (questionList != null && questionList.size() > 0) {
                        binding.tvQuestion.setText(questionList.get(mainIndex).getQuestion());
                        adapter = new ExamQuestionAdapter(ExamQuestionsActivity.this, optionList,
                                new ExamQuestionAdapter.RecyclerViewClickListener() {
                                    @Override
                                    public void recyclerViewListClicked(View v, int position) {
                                        //adapter.notifyDataSetChanged();
                                    }
                                }, new ExamQuestionAdapter.SelectedOptionList() {
                            @Override
                            public void selectedOptionList(ArrayList<String> list) {
                                selectedOptionList = list;
                            }
                        });
                        binding.recyclerview.setAdapter(adapter);
                    } else {
                        dataNotFound();
                    }

                } else {
                    dataNotFound();
                }

            } else {
                dataNotFound();
            }
        }

        @Override
        public void onFailure(Call<ExamQuestionResponse> call, Throwable t) {
            viewsEnable();

          }
       });
    }

   // next button in activity, question is updating because i have mainIndex but option are in 
    // recyclerview they are not updating 
     binding.tvNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mainIndex++;
            binding.tvQuestion.setText("");
            binding.tvQuestion.setText(questionList.get(mainIndex).getQuestion());
            adapter.notifyDataSetChanged();
        }
    });

标签: android

解决方案


我已经解决了我没有使用正确的索引来移动按钮单击时的索引的问题。我在下一个和上一个按钮单击时使用了 index++ 或 index--。

protected void showNextQuestion() {

    boolean isAnyItemSelect = false;
    List<ExamQuestionsOptionsItem> optionsItems = 
    examQuestionDataItemList.get(currentIndex).getOptions();
    prefConfig.saveOptionsItem(optionsItems);
    for (int i = 0; i < optionsItems.size(); i++) {
        if (optionsItems.get(i).isSelected()) {
            isAnyItemSelect = true;
            break;
        }
    }
    if (!isAnyItemSelect) {
        Toast.makeText(this, "Please select any answer before proceeding", 
    Toast.LENGTH_SHORT).show();
        return;
    }

    if (currentIndex == questionListSize - 1) {
        showFinishAlert(this.getString(R.string.exam_going_to_finish));

    } else {
        currentIndex++;
        prefConfig.writeRecoverIndex(currentIndex);

        if(isReview && !examQuestionDataItemList.get(currentIndex).isReview() )
        {
            showNextQuestion();
            return;
        }


        setQuestions();
    }
}

推荐阅读