Android开发:如何从ArrayList获取数据并在RecyclerView Adapter中展示?
Android中从List获取数据并在RecyclerView Adapter展示的实现方案
我来帮你拆解下这个流程——你的代码已经覆盖了核心步骤,我再把每个环节的细节和必要补充说明清楚:
1. 通过Retrofit获取数据(核心请求逻辑)
你这里用Retrofit发起异步请求获取问题列表,成功回调里拿到的response.body()就是我们需要的List<Get_Question_Response>数据集,这一步是数据来源的关键:
Call<List<Get_Question_Response>> newCall = apiInterface.getQuestions(GID); newCall.enqueue(new Callback<List<Get_Question_Response>>() { @Override public void onResponse (Call < List < Get_Question_Response >> call, Response < List < Get_Question_Response >> response) { // 拿到接口返回的List数据 List<Get_Question_Response> result2s = response.body(); if(result2s == null){ // 建议加空判断,避免后续空指针异常 return; } // 初始化Adapter并传入上下文和数据 show_questions_adapter = new ShowAdapter(getApplicationContext(), result2s); // 滚动到指定位置(按需使用) show_recyclerView.getLayoutManager().scrollToPosition(pos); // 给RecyclerView设置Adapter show_recyclerView.setAdapter(show_questions_adapter); // 刚设置Adapter时无需调用notifyDataSetChanged,后续数据更新时才需要 // show_questions_adapter.notifyDataSetChanged(); progressDialog.dismiss(); } @Override public void onFailure (Call < List < Get_Question_Response >> call, Throwable t){ Log.d("Response", "onFailure: " + t); // 失败时务必关闭进度框,避免界面卡住 progressDialog.dismiss(); } });
2. 关键的RecyclerView Adapter实现
你代码里的ShowAdapter是数据展示的核心,必须正确实现才能把List里的数据映射到UI上,这里给你补一个标准的Adapter模板,适配你的Get_Question_Response数据类:
public class ShowAdapter extends RecyclerView.Adapter<ShowAdapter.QuestionViewHolder> { private Context mContext; private List<Get_Question_Response> mQuestionList; // 构造方法,传入上下文和数据列表 public ShowAdapter(Context context, List<Get_Question_Response> questionList) { mContext = context; mQuestionList = questionList; } @NonNull @Override public QuestionViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { // 加载Item布局(这里假设你有item_question.xml布局文件) View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_question, parent, false); return new QuestionViewHolder(itemView); } @Override public void onBindViewHolder(@NonNull QuestionViewHolder holder, int position) { // 获取当前位置的数据项 Get_Question_Response question = mQuestionList.get(position); // 把数据绑定到UI控件上,根据你的数据类字段调整 holder.tvQuestionTitle.setText(question.getTitle()); holder.tvQuestionContent.setText(question.getContent()); } @Override public int getItemCount() { // 返回数据长度,空列表时返回0避免异常 return mQuestionList != null ? mQuestionList.size() : 0; } // ViewHolder类,缓存Item的UI控件提升性能 public class QuestionViewHolder extends RecyclerView.ViewHolder { TextView tvQuestionTitle; TextView tvQuestionContent; public QuestionViewHolder(@NonNull View itemView) { super(itemView); tvQuestionTitle = itemView.findViewById(R.id.tv_question_title); tvQuestionContent = itemView.findViewById(R.id.tv_question_content); // 绑定你布局里的其他控件 } } }
3. 必加的前置配置
一定要给RecyclerView设置LayoutManager,否则会直接报错,比如在Activity的onCreate方法里添加:
show_recyclerView.setLayoutManager(new LinearLayoutManager(this));
内容的提问来源于stack exchange,提问作者partyaksh chauhan
相关产品推荐
相关产品推荐

