You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:20:56