1. 程式人生 > >RecyclerView中巢狀RecyclerView的時候出現子RecyclerView顯示不全的問題解決

RecyclerView中巢狀RecyclerView的時候出現子RecyclerView顯示不全的問題解決

RecyclerView常見問題解決方案:

1:首先檢視RecyclerView在設定Adapter前有沒有被LayoutManager管理(如果沒有肯定連顯示都不顯示)

2:檢視子RecyclerView的子項佈局最外層有沒有把高度設定成match_parent,如果設定了(只顯示一行)

3:當前兩種情況都沒有錯的時候我們就檢查一下傳入的資料有沒有問題等

4:RecyclerView巢狀自動滾動,RecyclerView 高度設定wrap_content 無作用等問題 

專案中遇到多個recyclerview巢狀時,要麼只能顯示一個Item,要麼Item寬度不能鋪滿填充父佈局,按照網上搜的“簡單解決RecyclerView巢狀的RecyclerView條目顯示不全和寬度不能鋪滿"還是沒能解決,最後,看到本文開始的連結裡的文章,終於解決了。

總結一下:最子recyclerview(最裡面的)onCreateViewHolder方法中應這樣寫inflate(R.layout.item_fragment_study_hot_item, parent, false);

然後其父佈局inflate(R.layout.item_fragment_study_hot_body, null, false);

這樣的寫法,解決了recyclerview只能顯示一個Item,還有問題是寬度不能鋪滿,然後在寫父recyclerview的setLayoutManager方法時,這樣寫:

//RecyclerView 條目佈局寬度設定match_parent無效果的問題解決 
 //這裡為了解決recycleview不能撐滿全屏的問題,這裡layoutManager不管你佈局裡是否設定,都不準確,所以需要在程式碼裡
 //重新設定MATCH_PARENT

LinearLayoutManager layoutManager = new LinearLayoutManager(context) {
            @Override
            public RecyclerView.LayoutParams generateDefaultLayoutParams() {
                return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT);
            }
        };
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(layoutManager);

如下:是模仿朋友圈動態和評論的例子:

private class UserDiaryAdapter extends RecyclerView.Adapter<UserDiaryAdapter.ViewHolder> {
    private List<Diary> mDiaryList;
    class ViewHolder extends RecyclerView.ViewHolder {
        View myView;
        ImageView userImage;
        TextView userName;
        TextView dateTime;
        TextView circleText;
        ImageView circleBabyImage;
        RecyclerView commentRecycler;

        public ViewHolder(View itemView) {
            super(itemView);
            myView=itemView;
            userImage = (ImageView) itemView.findViewById(R.id.user_image);
            userName = (TextView) itemView.findViewById(R.id.user_name);
            dateTime = (TextView) itemView.findViewById(R.id.data_time);
            circleText = (TextView) itemView.findViewById(R.id.circle_text);
            circleBabyImage = (ImageView) itemView.findViewById(R.id.circle_baby_image);
            commentRecycler=(RecyclerView) itemView.findViewById(R.id.comment_recycler);
            //如果寫成RecyclerView就得使用如下的layoutManager來管理
            LinearLayoutManager layoutManager=new LinearLayoutManager(myView.getContext());
            layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            commentRecycler.setLayoutManager(layoutManager);
        }
    }

    public UserDiaryAdapter(List<Diary> diaryList) {
        mDiaryList = diaryList;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.diary_circle_item, parent, false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Diary diary = mDiaryList.get(position);
        GlideUtil.GlideWithPlaceHolder(CheckUserActivity.this, diary.getAuthorFace()).into(holder.userImage);
        holder.userName.setText(diary.getAuthorName());
        holder.dateTime.setText(diary.getDiaryTime());
        holder.circleText.setText(diary.getContent());
        GlideUtil.GlideWithPlaceHolder(CheckUserActivity.this, diary.getDiaryImg().get(position)).into(holder.circleBabyImage);
       // holder.commentRecycler.setAdapter(new CommentAdapter(diary.getComment().getCommentMemberList()));
        //只顯示一條?
        CommentAdapter adapter=new CommentAdapter(diary.getComment().getCommentMemberList());
        holder.commentRecycler.setAdapter(adapter);
    }

    @Override
    public int getItemCount() {
        return mDiaryList.size();
    }
    class CommentAdapter extends RecyclerView.Adapter<CommentAdapter.ViewHolders>{
        private List<CommentMember> mCommentMemberList;
        class ViewHolders extends RecyclerView.ViewHolder{
            TextView commentName;
            TextView commentContent;
            public ViewHolders(View itemView){
                super(itemView);
                commentName=(TextView)itemView.findViewById(R.id.comment_name);
                commentContent=(TextView)itemView.findViewById(R.id.comment_content);
            }
        }
        public CommentAdapter(List<CommentMember> commentMembers){
            mCommentMemberList=commentMembers;
        }
        @Override
        public ViewHolders onCreateViewHolder(ViewGroup parent,int viewType){
            View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.item_comment_layout,parent,false);
            ViewHolders holders=new ViewHolders(view);
            return holders;
        }
        @Override
        public void onBindViewHolder(ViewHolders holder,int position){
            CommentMember commentMember=mCommentMemberList.get(position);
            holder.commentName.setText(commentMember.getMemberName()+": ");
            holder.commentContent.setText(commentMember.getContent());
        }
        @Override
        public int getItemCount(){
            return mCommentMemberList.size();
        }
    }
}