Trong phương thức MainActivity của tôi, checkAnswer và showSolution phải được sửa đổi vì tôi đã thêm bộ chuyển đổi RecycleView vào dự án và chuyển tất cả các mục Xem sang Câu hỏi. Tôi không hiểu làm cách nào để kiểm tra trạng thái của nút radio rbGroup bằng cách sử dụng isChecked trong Câu hỏi và chuyển id của nó tới MainActivity. Tôi đã thử kiểm tra:Radiogroup trong RecyclerviewNhưng tôi vẫn chưa rõ những bước tiếp theo cần thực hiện. Ai đó có thể cho tôi hướng dẫn cơ bản về những bước tôi nên thực hiện để sửa đổi dự án của mình kể từ bây giờ không. Vẫn không thể tìm thấy câu trả lời hoặc hướng dẫn cách xử lý danh sách nút radio trong Chế độ xem tái chế. Làm cách nào để kiểm tra trạng thái nút radio bằng giao diện của MainActivity?
Thực hiện một số cập nhật theo đề xuất. Không hiểu tôi nên sửa đổi phương thức showSolution như thế nào.
lớp công khai MainActivity mở rộng AppCompatActivity {
bộ điều hợp Câu hỏi công khai;
public ArrayList questionList;
câu hỏi int riêngCountTotal;
riêng tư dài backPressedTime;
điểm int riêng tư;
câu hỏi int riêngBộ đếm;
Nút riêng tư btnConfirmNext;
boolean riêng đã trả lời;
Câu hỏi riêng tưCâu hỏi hiện tại;
TextView riêng tư tvQuestion, tvScore, tvQuestionCount, tvCountdown;
công khai QuizDbHelper dbHelper;
RecyclerView RecyclerView;
@Ghi đè
khoảng trống được bảo vệ trênCreate(Gói đã lưuInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnConfirmNext = findViewById(R.id.confirm_button);
tvCountdown = findViewById(R.id.count_down);
tvScore = findViewById(R.id.text_view_score);
RecyclerView = findViewById(R.id.recycler_view);
RecyclerView.setNestedScrollingEnabled(false);
RecyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL));
questionList = new ArrayList<>();
bộ chuyển đổi = Câu hỏi mới (cái này, danh sách câu hỏi);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 1);
RecyclerView.setLayoutManager(mLayoutManager);
RecyclerView.setItemAnimator(new DefaultItemAnimator());
RecyclerView.setAdapter(adapter);
dbHelper = QuizDbHelper mới(cái này);
questionList = dbHelper.getAllQuestions();
questionCountTotal = questionList.size();
Collections.shuffle(questionList);
chuẩn bịQuestion();
btnConfirmNext.setOnClickListener(new View.OnClickListener() {
@Ghi đè
public void onClick(Xem chế độ xem) {
checkAnswer();
}
});
}
khoảng trống riêng tư chuẩn bịQuestion() {
bộ chuyển đổi = Câu hỏi mới (getApplicationContext(), questionList);
RecyclerView.setAdapter(adapter);
if (questionCounter < questionCountTotal) {
currentQuestion = questionList.get(questionCounter);
đã trả lời = sai;
btnConfirmNext.setText("Xác nhận");
} khác {
kết thúcQuiz();
}
}
// Tôi nên xử lý nó như thế nào trong onbindViewHolder
kiểm tra khoảng trống riêng tưAnswer() {
đã trả lời = đúng;
countDownTimer.cancel();
RadioButton rbSelected = findViewById(rbGroup.getCheckedRadioButtonId());
int câu trả lờiNb = rbGroup.indexOfChild(rbSelected) + 1;
if (answerNb == currentQuestion.getAnswerNB()) {
điểm++;
tvScore.setText("Điểm: " + điểm);
}
showSolution();
}
// Làm cách nào để thay đổi trạng thái của các mục trong chế độ xem tái chế
khoảng trống riêng tư showSolution() {
rb1.setTextColor(Color.RED);
rb2.setTextColor(Color.RED);
rb3.setTextColor(Color.RED);
rb4.setTextColor(Color.RED);
chuyển đổi (currentQuestion.getAnswerNB()) {
trường hợp 1:
rb1.setTextColor(Color.GREEN);
phá vỡ;
trường hợp 2:
rb2.setTextColor(Color.GREEN);
phá vỡ;
trường hợp 3:
rb3.setTextColor(Color.GREEN);
phá vỡ;
case 4:
rb4.setTextColor(Color.GREEN);
phá vỡ;
}
btnConfirmNext.setText("Kết thúc");
}
bộ chuyển đổi vấn đề
lớp công khai Câu hỏiAdapter mở rộng RecyclerView.Adapter {
public ArrayList questionList;
lớp công khai MyViewHolder mở rộng RecyclerView.ViewHolder {
TextView công khai tvQuestion, tvScore, tvQuestionCount, tvCountdown;
Nhóm vô tuyến công cộng rbGroup;
RadioButton công cộng rb1, rb2, rb3, rb4;
công khai MyViewHolder(Chế độ xem xem) {
super(view);
tvQuestion = view.findViewById(R.id.question);
rbGroup = view.findViewById(R.id.radiog_group);
rb1 = view.findViewById(R.id.radio_button1);
rb2 = view.findViewById(R.id.radio_button2);
rb3 = view.findViewById(R.id.radio_button3);
rb4 = view.findViewById(R.id.radio_button4);
}
}
public questionAdapter(Context mContext, ArrayList questionList) {
this.questionList = questionList;
}
@Ghi đè
công khai MyViewHolder onCreateViewHolder(ViewGroup cha, int viewType) {
Xem itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.question_card, parent, false);
trả về MyViewHolder mới (itemView);
}
@NonNull
@Ghi đè
public void onBindViewHolder(người giữ MyViewHolder cuối cùng, vị trí int) {
Câu hỏi cuối cùng câu hỏi = questionList.get(position);
Holder.tvQuestion.setText(question.getQuestion());
Holder.rb1.setText(question.getOption1());
Holder.rb2.setText(question.getOption2());
Holder.rb3.setText(question.getOption3());
Holder.rb4.setText(question.getOption4());
Holder.rbGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Ghi đè
public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
// Làm cách nào tôi có thể xử lý trạng thái Kiểm tra tại đây và chuyển nó vào hoạt động chính?
}
});
}
@Ghi đè
công khai int getItemCount() {
trả về questionList.size();
}
}
đổi mới. 在向我的 QuestionAdapter 添加接口(interface)并对构造函数和其他部分进行更改后,我在 MainActivity 中的 checkAnswer 看起来像这样
kiểm tra khoảng trống riêng tưAnswer() {
đã trả lời = đúng;
countDownTimer.cancel();
adapter = new QuestionAdapter(getApplicationContext(), questionList, new QuestionAdapter.OnItemListener() {
@Ghi đè
public void onItemSelect(int position) {
if (position+1==currentQuestion.getAnswerNB()){
điểm++;
tvScore.setText("Điểm: " + điểm);
}
}
});
showSolution();
}
现在我应该如何处理我的 showSolution 方法?似乎在 checkAnswer 之后我应该将信息发送回 QuestionAdapter 并在那里执行 setTextColor 。可能我走错了路......
你可以通过使用界面来做到这一点。
像这样创建一个接口(interface):
public interface OnItemListener {
public void onItemSelect(int position);
}
然后在您的适配器中像这样更改构造函数:
QuestionAdapter(Context mContext, ArrayList questionList, OnItemListener
onItemListener) {
this.onItemListener = onItemListener;
this.questionList = questionList;
}
并将这一行添加到您的 onCheckedChangeListener
onItemListener.onItemSelect(position);
Như thế này:
Holder.rbGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Ghi đè
public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
// Làm cách nào tôi có thể xử lý trạng thái Kiểm tra tại đây và chuyển nó vào hoạt động chính?
onItemListener.onItemSelect(position);
}
});
然后在你的 Activity 中添加这个你定义适配器的地方(这是定义适配器的另一种方式,你也可以使用你自己的方式只记得像这样添加接口(interface)(新的 OnItemListener ...)):
dbHelper = new QuizDbHelper(getApplicationContext(), questionList, new
OnItemListener({
@Ghi đè
public void onItemSelect(int position) {
// handle your check state of adapter item here
}
});
Tôi là một lập trình viên xuất sắc, rất giỏi!