Заполните список RecyclerView - PullRequest
       10

Заполните список RecyclerView

0 голосов
/ 10 сентября 2018

Я не могу заставить мои 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 ]

0 голосов
/ 10 сентября 2018

Каждый раз, когда вы инициализируете адаптер одним значением. Вот почему список содержит одно значение, а остальные были пустыми. Вам нужно переместить 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();
        }
0 голосов
/ 10 сентября 2018

Используйте это, может быть, это поможет вам.

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);
}
0 голосов
/ 10 сентября 2018

Скажите, если это работает:

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(); за пределы цикла, потому что вам нужно вызывать его только один раз, а не каждый раз, когда вы хотите настроить просмотрщик.

...