为了账号安全,请及时绑定邮箱和手机立即绑定

填充 RecyclerView 列表

填充 RecyclerView 列表

www说 2021-09-12 15:26:31
我似乎无法让我RecyclerView一直填充。它只制作第一个单元格,其他单元格为空白。尽管 for 循环似乎运行了多次。    JsonObjectRequest root = new JsonObjectRequest(Request.Method.GET, URL, null, new Response.Listener<JSONObject>() {        @Override        public void onResponse(JSONObject response) {            try {                JSONObject feed = response.getJSONObject("feed");                JSONArray results = feed.getJSONArray("results");                //Log.d("FEED", String.valueOf(feed));w                for(int i = 0; i<results.length(); i++){                    JSONObject resultsObj = results.getJSONObject(i);                    Log.d(TAG, "inside" + String.valueOf(i));                    mImageUrls.add(resultsObj.getString("artworkUrl100"));                    mTitle.add(resultsObj.getString("name"));                    getRecyclerView();                }                adapter.notifyDataSetChanged();            } catch (JSONException e) {                e.printStackTrace();            }        }    }, new Response.ErrorListener() {        @Override        public void onErrorResponse(VolleyError error) {        }    });    mRequestQueue.add(root);}private void getRecyclerView(){    Log.d(TAG, "getRecyclerView");    recyclerView = findViewById(R.id.recyclerView);    adapter = new RecyclerViewAdapter(mImageUrls, mTitle, this);    recyclerView.setAdapter(adapter);    recyclerView.setLayoutManager(new LinearLayoutManager(this));    recyclerView.setHasFixedSize(true);}
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

使用这个可能对你有帮助。


private void getRecyclerView(){

    Log.d(TAG, "getRecyclerView");

    recyclerView = findViewById(R.id.recyclerView);

    adapter = new RecyclerViewAdapter(mImageUrls, mTitle, this);

    recyclerView.setAdapter(adapter);

    recyclerView.setLayoutManager(new LinearLayoutManager(this, 

    LinearLayoutManager.VERTICAL, false));

    recyclerView.setHasFixedSize(true);

}


查看完整回答
反对 回复 2021-09-12
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

告诉我这是否有效:


JsonObjectRequest root = new JsonObjectRequest(Request.Method.GET, URL, null, new Response.Listener<JSONObject>() {

        @Override

        public void onResponse(JSONObject response) {

            try {

                JSONObject feed = response.getJSONObject("feed");

                JSONArray results = feed.getJSONArray("results");

                //Log.d("FEED", String.valueOf(feed));w

                for(int i = 0; i<results.length(); i++){

                    JSONObject resultsObj = results.getJSONObject(i);


                    Log.d(TAG, "inside" + String.valueOf(i));

                    mImageUrls.add(resultsObj.getString("artworkUrl100"));

                    mTitle.add(resultsObj.getString("name"));

                }


                getRecyclerView();

                adapter.notifyDataSetChanged();


            } catch (JSONException e) {

                e.printStackTrace();

            }


        }

    }, new Response.ErrorListener() {

        @Override

        public void onErrorResponse(VolleyError error) {


        }

    });

    mRequestQueue.add(root);


}


private void getRecyclerView(){

    Log.d(TAG, "getRecyclerView");

    recyclerView = findViewById(R.id.recyclerView);

    adapter = new RecyclerViewAdapter(mImageUrls, mTitle, this);

    recyclerView.setAdapter(adapter);

    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    recyclerView.setHasFixedSize(true); }

我所做的是移出getRecyclerView();循环,因为您只需要调用一次,而不是每次要设置 recyclerview 时。


查看完整回答
反对 回复 2021-09-12
?
千万里不及你

TA贡献1784条经验 获得超9个赞

每次使用一个值初始化适配器时。这就是列表包含一个值而其他值是空白的原因。您需要移至getRecyclerView();循环外。


看起来像这样:


try {

            JSONObject feed = response.getJSONObject("feed");

            JSONArray results = feed.getJSONArray("results");

            //Log.d("FEED", String.valueOf(feed));w

            for(int i = 0; i<results.length(); i++){

                JSONObject resultsObj = results.getJSONObject(i);


                Log.d(TAG, "inside" + String.valueOf(i));

                mImageUrls.add(resultsObj.getString("artworkUrl100"));

                mTitle.add(resultsObj.getString("name"));


            }

             getRecyclerView();

           // No need to notify the data set changed 

           // adapter.notifyDataSetChanged();


        } catch (JSONException e) {

            e.printStackTrace();

        }


查看完整回答
反对 回复 2021-09-12
  • 3 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信