【问题标题】:How to show data from ArrayList to RecycleView?如何将数据从 ArrayList 显示到 RecyclerView?
【发布时间】:2020-07-23 03:42:35
【问题描述】:

我像这段代码一样从 JSON 读取数据到 ArrayList。

MySQLConnect.java

public List<ComputerService> getData(){
    String url = URL + GET_URL;
    StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            showJSON(response);

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(main, error.getMessage().toString(), LENGTH_LONG).show();
        }
    }

    );

    RequestQueue requestQueue = Volley.newRequestQueue(main.getApplicationContext());
    requestQueue.add(stringRequest);

    return computerServicesArrayList;
}

public void showJSON(String response){
    String data_mysql = "";
    computerServicesArrayList.clear();
    try{
        JSONObject jsonObject = new JSONObject(response);
        JSONArray result = jsonObject.getJSONArray("data");

        for(int i=0; i < result.length(); i++){
            JSONObject collectData = result.getJSONObject(i);
            String id_job = collectData.getString("id_job");
            String type_job = collectData.getString("type_job");
            String place_more_job = collectData.getString("place_more_job");

            computerservice = new ComputerService(id_job, type_job, place_more_job);
            computerServicesArrayList.add(computerservice);

        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

在 MainActitvity 中,我将数据从 MySQLConnect 设置为 Myadapter,如下所示。

private  MyAdapter myAdapter;
private MySQLConnect mySQLConnect;
public static List<ComputerService> computerServicesArrayList;

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

    txtAdd = (EditText)findViewById(R.id.txtAdd);
    btnAdd = (Button)findViewById(R.id.btnAdd);
    rcyViewData = (RecyclerView)findViewById(R.id.rcyViewData);

    mySQLConnect = new MySQLConnect(MainActivity.this);
    computerServicesArrayList =  mySQLConnect.getData();
    mAdapter = new MyAdapter(this, computerServicesArrayList);
}

在我的适配器中,我尝试像这样将数据从 JSON 传输到 RecycleView。

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

    List<ComputerService> computerServicesArrayList;
    Context context;

    public MyAdapter(Context context, List<ComputerService> computerServicesArrayList) {
        this.context = context;
        this.computerServicesArrayList = computerServicesArrayList;
    }


    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.my_row, parent, false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.myText1.setText(computerServicesArrayList.toString());
    }

    @Override
    public int getItemCount() {
        return 0;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder{

        TextView myText1, myText2;


        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            myText1 = itemView.findViewById(R.id.txtTitle);
            myText2 = itemView.findViewById(R.id.txtDetail);

        }
    }
}

在 MyAdapter 函数 onBindViewHolder 我不知道如何向 holder.myText1.setText() 显示数据。

如何将 ArraList 数据显示到 RecycleView?

【问题讨论】:

  • getItemCount() 方法中的适配器中返回computerServicesArrayList.size() 还使用foreach 循环在onBindViewHolder 方法中单独迭代所有项目

标签: android android-recyclerview android-json


【解决方案1】:

您的适配器 getItemCount 总是返回 0

这样做:

@Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        ComputerService obj = computerServicesArrayList.get(position));
        holder.myText1.setText(obj.getTypeJob());
        holder.myText2.setText(obj.getJobId());

    }

    @Override
    public int getItemCount() {
        return computerServicesArrayList.size();
    }

您的 ComputerService.java 模型:

public class ComputerService{
    String jobId;
    String typeJob;
    String placeModeJob;
    
    ComputerService(String jobId,String typeJob,String placeModeJob) {
     this.jobId = jobId;
     this.typeJob = typeJob;
     this.placeModeJob = placeModeJob;
    }

    public String getJobId() {
        return jobId;
    }

    public String getPlaceModeJob() {
        return placeModeJob;
    }

    public String getTypeJob() {
        return typeJob;
    }
}

【讨论】:

    【解决方案2】:

    getItemCount() return 0 将告诉适配器您没有任何要显示的项目并且不会触发 onCreateViewHolder 或 onBindViewHoldergetItemCount() 应该返回 computerServicesArrayList.size 以显示数据

    【讨论】:

      猜你喜欢
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 2016-08-24
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多