Horizontal RecyclerViews inside vertical RecyclerView scrolling jerks

后端 未结 3 1827
醉酒成梦
醉酒成梦 2020-12-30 11:06

I am using a layout in which I used multiple RecyclerViews (Horizontal) as a item view of RecyclerView. The problem is that the vertical scrolling is not as smooth as I am e

3条回答
  •  感动是毒
    2020-12-30 12:02

    You can try this way

    main activity

    public void initialize(List> responseObjectList) {
        RecyclerView upperRecyclerView = (RecyclerView) this.findViewById(R.id.main_layout);
        upperRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        VerticalAdapter adapter = new VerticalAdapter(this, responseObjectLists);
        upperRecyclerView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }
    

    Vertical recycled view adapter

    public class VerticalAdapter extends RecyclerView.Adapter {
    
        final private SearchActivity activity;
        List> list;
    
        public VerticalAdapter(SearchActivity activity, List> lists) {
            this.list = lists;
            this.activity = activity;
        }
    
        public Holder onCreateViewHolder(ViewGroup parent,int viewType) {
            View itemLayoutView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.vertical_layout, null);
            return new Holder(itemLayoutView);
        }
    
        public void onBindViewHolder(Holder viewHolder, int position) {
            List objectList = list.get(position);
            viewHolder.packageTitle.setText(objectList.get(0).getTag());
            ImageAdapter imageAdapter = new ImageAdapter(activity, objectList);
            viewHolder.horizontalRecyclerView.setLayoutManager(new LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false));
            viewHolder.horizontalRecyclerView.setAdapter(imageAdapter);
            viewHolder.horizontalRecyclerView.setNestedScrollingEnabled(false);
            imageAdapter.notifyDataSetChanged();
        }
    
        public final static class Holder extends RecyclerView.ViewHolder {
    
            protected TextView packageTitle;
            protected RecyclerView horizontalRecyclerView;
    
            public Holder(View view) {
                super(view);
                this.packageTitle = (TextView) view.findViewById(R.id.recycleViewTitle);
                this.horizontalRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
                this.horizontalRecyclerView.setLayoutManager(new LinearLayoutManager(this.horizontalRecyclerView.getContext(), LinearLayoutManager.HORIZONTAL, false));
                this.horizontalRecyclerView.setNestedScrollingEnabled(false);
                horizontalRecyclerView.setAdapter(null);
            }
        }
    
        public int getItemCount() {
            return ListUtil.isEmpty(list) ? 0 : list.size();
        }
    }
    

    Horizontal recycleview adapter

    public class ImageAdapter extends     RecyclerView.Adapter {
    
        private List mainPageResponseList;
        private SearchActivity activity;
    
        public ImageAdapter(SearchActivity activity, List mainPageResponseList) {
            this.mainPageResponseList = mainPageResponseList;
            this.activity = activity;
        }
    
        public ImageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View itemLayoutView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.horizontal_layout_view, null);
            ViewHolder viewHolder = new ViewHolder(itemLayoutView);
            return viewHolder;
        }
    
        public void onBindViewHolder(ViewHolder viewHolder, int position) {
            ResponseObject object = mainPageResponseList.get(position);
            Util.setImageUsingGlide(object.getImage(), viewHolder.imageView);
            viewHolder.packageName.setText(object.getDestination());
            viewHolder.packagePrice.setText(object.getPrice() + "");
            viewHolder.imageView.setOnClickListener(null);
        }
    
        public final static class ViewHolder extends RecyclerView.ViewHolder {
    
            protected ImageView imageView;
            protected TextView packageName;
            protected TextView packagePrice;
    
            public ViewHolder(View view) {
                super(view);
                this.imageView = (ImageView) view.findViewById(R.id.packageImage);
                this.packageName = (TextView) view.findViewById(R.id.packageName);
                this.packagePrice = (TextView) view.findViewById(R.id.packagePrice);
            }
        }
    
        public int getItemCount() {
            return ListUtil.isEmpty(mainPageResponseList) ? 0 : mainPageResponseList.size();
        }
    }
    

    main_layout.xml

    
     
    
    
    
        
    
            
    
                
    
                    
    
                    
    
                    
                        
                            
                            
                        
                        
                            
                            
                        
                    
                
    
                
            
    
            
    
        
    
    
    
    
    
    
    

    vertical_layout.xml

    
    
    
    

    holizontal_layout.xml

    
    
        
        
            
        
    
    

提交回复
热议问题