Android RecycleView为空。我错过了什么?

Android RecycleView为空。我错过了什么?,android,android-recyclerview,onclicklistener,oncheckedchanged,Android,Android Recyclerview,Onclicklistener,Oncheckedchanged,我不明白我的准备方法遗漏了什么。Main活动开始,但我的RecycleView为空。在MainActivity的开始部分,我有问题和单选按钮,当时间用完或按下“确认/下一步”按钮时,下一个问题和选项正在加载。我决定尝试使用RecycleView和卡片在MainActivity中一次加载所有问题 公共类MainActivity扩展了AppCompatActivity{ private QuestionAdapter adapter; private ArrayList<Question>

我不明白我的准备方法遗漏了什么。Main活动开始,但我的RecycleView为空。在MainActivity的开始部分,我有问题和单选按钮,当时间用完或按下“确认/下一步”按钮时,下一个问题和选项正在加载。我决定尝试使用RecycleView和卡片在MainActivity中一次加载所有问题

公共类MainActivity扩展了AppCompatActivity{

private QuestionAdapter adapter;
private ArrayList<Question> questionList;
private int questionCountTotal;
private long backPressedTime;

public QuizDbHelper dbHelper;
RecyclerView recyclerView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    recyclerView = findViewById(R.id.recycler_view);
    questionList = new ArrayList<>();
    adapter = new QuestionAdapter(this, questionList);

    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 1);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(adapter);

    dbHelper = new QuizDbHelper(this);
    questionList = dbHelper.getAllQuestions();
    questionCountTotal = questionList.size();
    Collections.shuffle(questionList);


    prepareQuestion();


}


private void prepareQuestion() {

    //Tried different things here. Maybe problem is somewhere else?
    Question q = new Question();
    questionList.add(q);
    //        questionList.addAll(dbHelper.getAllQuestions());
    adapter.notifyDataSetChanged();



}

}
专用适配器;
私人ArrayList问题列表;
私人总人数;
私人长时间背压;
公共QuizDbHelper数据库助手;
回收视图回收视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=findViewById(R.id.recycler\u视图);
questionList=新的ArrayList();
adapter=新的QuestionAdapter(此,questionList);
RecyclerView.LayoutManager mLayoutManager=新的GridLayoutManager(这个,1);
recyclerView.setLayoutManager(mLayoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setAdapter(适配器);
dbHelper=新的QuizDbHelper(本);
questionList=dbHelper.getAllQuestions();
questionCountTotal=questionList.size();
收集。洗牌(问题列表);
prepareQuestion();
}
私有无效准备(){
//在这里尝试了不同的方法。也许问题出在其他地方?
问题q=新问题();
问题列表。添加(q);
//addAll(dbHelper.getAllQuestions());
adapter.notifyDataSetChanged();
}
}
这是我的问题

public class QuestionAdapter extends RecyclerView.Adapter<QuestionAdapter.MyViewHolder> {

private ArrayList<Question> questionList;

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView tvQuestion, tvScore, tvQuestionCount, tvCountdown;
    public RadioGroup rbGroup;
    public RadioButton rb1, rb2, rb3, rb4;



    public MyViewHolder(View view) {
        super(view);
        tvQuestion = view.findViewById(R.id.question);
        tvScore = view.findViewById(R.id.score);
        tvQuestionCount = view.findViewById(R.id.question_count);
        tvCountdown = view.findViewById(R.id.count_down);
        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<Question> questionList) {
    this.questionList = questionList;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.question_card, parent, false);

    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
    Question question = 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());
}

@Override
public int getItemCount() {
    return questionList.size();
公共类QuestionAdapter扩展了RecyclerView.Adapter{ 私人ArrayList问题列表; 公共类MyViewHolder扩展了RecyclerView.ViewHolder{ 公共文本查看电视问题、电视分数、电视问题计数、电视倒计时; 公共放射组; 公共单选按钮rb1、rb2、rb3、rb4; 公共MyViewHolder(视图){ 超级(视图); tvQuestion=view.findviewbyd(R.id.question); tvScore=view.findViewById(R.id.score); tvQuestionCount=view.findViewById(R.id.question\u计数); tvCountdown=view.findviewbyd(R.id.countdown); rbGroup=view.findViewById(R.id.RATIO_组); rb1=view.findViewById(R.id.radio_按钮1); rb2=view.findViewById(R.id.radio_按钮2); rb3=view.findViewById(R.id.radio_按钮3); rb4=view.findViewById(R.id.radio_按钮4); } } 公共问题适配器(上下文mContext、ArrayList问题列表){ this.questionList=问题列表; } @凌驾 公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){ View itemView=LayoutInflater.from(parent.getContext()) .充气(R.layout.question_卡,家长,假); 返回新的MyViewHolder(itemView); } @凌驾 公共无效onBindViewHolder(最终MyViewHolder,内部位置){ 问题=问题列表。获取(位置); 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()); } @凌驾 public int getItemCount(){ 返回questionList.size();

要一次加载所有问题,您应该在活动中获取这些问题并将其添加到问题列表中

questionList.addAll(dbHelper.getAllQuestions());
adapter.notifyDataSetChanged();//to refresh view and show items ;-)
如果要在适配器定义中获取click listener,可以在preparequestion()方法中使用侦听器 更改适配器。notifyDataSetChanged();


感谢您的回复。我对问题做了一些更改,试图简化问题,目前只指出一个问题。我的活动为空,RecycleView没有从数据库中填充问题。adapter=新问题适配器(getApplicationContext(),questionList);RecycleView.setAdapter(adapter)非常感谢,它成功了。
adapter = new QuestionAdapter (getActivity(), questionList);
recyclerView.setAdapter(adapter);