Use RecyclerView inside ScrollView with flexible Recycler item height

后端 未结 8 1656
误落风尘
误落风尘 2020-11-29 04:57

I want to know if there is any possible way to use RecyclerView?

Before this, I used RecyclerView with fixed height inside a

相关标签:
8条回答
  • 2020-11-29 05:28

    I search for answer this question all over the world but I didn't found any direct answer for this popular question. At last I mixed some trick together and solved this problem!

    My problem start when my boss asked me to use a RecyclerView inside a ScrollView, and as you know we cannot use two Scrollable objects inside each other except when we set or know fix item height for our RecyclerView. and this is the answer:

    Step 1: at first you should find your RecyclerView flexible item height and this is possible from your RecyclerView>onBindViewHolder

    holder.itemView.post(new Runnable() {
            @Override
            public void run() {
    
                int cellWidth = holder.itemView.getWidth();// this will give you cell width dynamically
                int cellHeight = holder.itemView.getHeight();// this will give you cell height dynamically
    
                dynamicHeight.HeightChange(position, cellHeight); //call your iterface hear
            }
        });
    

    with this code you find your item height as them build and send the item height to your activity with interface.

    for those friend who have problem with interface i leave interface code below that should write in Adapter.

    public interface DynamicHeight {
        void HeightChange (int position, int height);
    }
    

    Step 2: we found our item height so far and now we want to set height to our RecyclerView. first we should calculate the Summation of item height. in this step we do this by BitMap first implements last step interface and write these code below inside your Activity or Fragment that define your RecyclerView:

    @Override
    public void HeightChange(int position, int height) {
        itemHeight.put(position, height);
        sumHeight = SumHashItem (itemHeight);
    
        float density = activity.getResources().getDisplayMetrics().density;
        float viewHeight = sumHeight * density;
        review_recyclerView.getLayoutParams().height = (int) sumHeight;
    
        int i = review_recyclerView.getLayoutParams().height;
    }
    
    int SumHashItem (HashMap<Integer, Integer> hashMap) {
        int sum = 0;
    
        for(Map.Entry<Integer, Integer> myItem: hashMap.entrySet())  {
            sum += myItem.getValue();
        }
    
        return sum;
    }
    

    Step 3: now we have the summation of your RecyclerView height. for last step we should just send the Interface that we write in last step to adapter with some code like this:

    reviewRecyclerAdapter = new ReviewRecyclerAdapter(activity, reviewList, review_recyclerView, this);
    

    when you implement interface, you should send it to your with your context that I use this.

    Enjoy it

    0 讨论(0)
  • 2020-11-29 05:31

    [RESOLVED] I have same issue with Horizontal recycleview. Change Gradle repo for recycleview

     compile 'com.android.support:recyclerview-v7:23.2.1'
    

    Write this: linearLayoutManager.setAutoMeasureEnabled(true);

    Fixed bugs related to various measure-spec methods in update

    Check http://developer.android.com/intl/es/tools/support-library/features.html#v7-recyclerview

    I have found issue with 23.2.1 library: When item is match_parent recycle view fill full item to view, please always go with min height or "wrap_content".

    Thanks

    0 讨论(0)
提交回复
热议问题