簡體   English   中英

在Android中的Recycler視圖中將Arraylist發送到適配器時出錯

[英]Error in sending Arraylist to Adapter in Recycler view in Android

我有一個arraylist CastArrayList ,其中數據被添加到VolleyonResponse方法中,從那里我想檢查CastArrayList的大小是否大於7,另一個arraylist subCastArrayListCastArraylist從位置0復制到7並將其發送到RecyclerView但是沒有在RecyclerView獲得任何視圖。 我想如果CastArrayList大小大於7, SubCastArrayList應該復制前7個元素,否則復制整個CastArrayList ,然后將SubCastArrayList發送到adapter

ArrayList<Cast> castArrayList;
ArrayList<Cast> subCastArrayList;
castArrayList = new ArrayList<>();
subCastArrayList = new ArrayList<>();

castDetailAdapter = new 
CastDetailAdapter(MovieView.this,castArrayList,subCastArrayList);

RecyclerView.LayoutManager mLayoutManager = new 
StaggeredGridLayoutManager(1,StaggeredGridLayoutManager.HORIZONTAL);

recycler_view.setLayoutManager(mLayoutManager);
recycler_view.setItemAnimator(new DefaultItemAnimator());
recycler_view.setAdapter(castDetailAdapter);

StringRequest stringRequest1 = new StringRequest(Request.Method.GET, url, 
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            int i;
            for (i=0;i<movieDetailFull.getCredits().getCast().size();i++) {
                Cast cast = new Cast();

                cast.setName(movieDetailFull.getCredits().getCast().get(i).getName());

                cast.setId(movieDetailFull.getCredits().getCast().get(i).getId());

                castArrayList.add(i,cast);
                castDetailAdapter.notifyDataSetChanged();
            }
        }

        if (castArrayList.size() > 7) {

            subCastArrayList  = new ArrayList<Cast>
            (castArrayList.subList(0,6));
            castDetailAdapter.notifyDataSetChanged();
        }
        else {
            subCastArrayList = new ArrayList<Cast>(castArrayList);
            castDetailAdapter.notifyDataSetChanged();
        }

您正在通過創建新的arraylist來更改subCastArrayList列表的引用現在subCastArrayList和適配器中的列表是對不同列表的兩個不同引用

所以只需添加元素即可

subCastArrayList.clear();
// ^^^ clear the list instead of creating new one inside if or else
if (castArrayList.size() > 7)
{
    //subCastArrayList.addAll(castArrayList.subList(0,6));
    subCastArrayList.addAll(castArrayList.subList(0,7));
    // upper range is exclusive so use              ^ 
}else{
    subCastArrayList.addAll(castArrayList);
}
    castDetailAdapter.notifyDataSetChanged();
   // move notify outside , avoid redundant statements 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM