`
VIP庚
  • 浏览: 223380 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

RecycleView 在实战中所需要的方法 ---- 持续更新

 
阅读更多
1 RecycleView 通过/位置 id找到所对应的ViewHolder
recyclerView.findViewHolderForAdapterPosition(i);
recyclerView.findViewHolderForItemId()

2 判断RecycleView  是否滑动到最底端

LinearLayoutManager  layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
        //添加滚动监听器
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                // 当不滚动时
                if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                    // 判断是否滚动到底部
                    //得到可见视图项最底层id
                    int lostPos = layoutManager.findLastVisibleItemPosition();
                    if (lostPos == layoutManager.getItemCount() - 1) {
                        //Toast.makeText(ShowActivity.this, "最后:" + lostPos, Toast.LENGTH_SHORT).show();
                       
                    }
                }
            }
        });


3 动态设置RecycleView的大小   适用于在同一个活动中使用2个recycleview的情况

 for(int i=0; i<adapter1.getItemCount(); i++) {
            View listItem=recyclerView1.findViewHolderForAdapterPosition(i).itemView;
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();

        }   

        ViewGroup.LayoutParams params = recyclerView1.getLayoutParams();
         params.height = totalHeight + (recyclerView1.getDividerHeight() * (listAdapter.getCount() - 1));
        //recyclerView1.getDividerHeight()获取子项间分隔符占用的高度
        //params.height最后得到整个recyclerView1完整显示需要的高度
            recyclerView1.setLayoutParams(params);



4 设置recycleview的视图项之间的分割线
先自定义定义一个分割线类
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;


/**
 * This class is from the v7 samples of the Android SDK. It's not by me!
 * <p/>
 * See the license above for details.
 */
public class DividerItemDecoration extends RecyclerView.ItemDecoration {

    private static final int[] ATTRS = new int[]{
            android.R.attr.listDivider
    };

    public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;

    public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;

    private Drawable mDivider;

    private int mOrientation;

    public DividerItemDecoration(Context context, int orientation) {
        final TypedArray a = context.obtainStyledAttributes(ATTRS);
        mDivider = a.getDrawable(0);
        a.recycle();
        setOrientation(orientation);
    }

    public void setOrientation(int orientation) {
        if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {
            throw new IllegalArgumentException("invalid orientation");
        }
        mOrientation = orientation;
    }

    @Override
    public void onDraw(Canvas c, RecyclerView parent) {
        Log.v("recyclerview - itemdecoration", "onDraw()");

        if (mOrientation == VERTICAL_LIST) {
            drawVertical(c, parent);
        } else {
            drawHorizontal(c, parent);
        }

    }


    public void drawVertical(Canvas c, RecyclerView parent) {
        final int left = parent.getPaddingLeft();
        final int right = parent.getWidth() - parent.getPaddingRight();

        final int childCount = parent.getChildCount();
        for (int i = 0; i < childCount; i++) {
            final View child = parent.getChildAt(i);
            android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext());
            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                    .getLayoutParams();
            final int top = child.getBottom() + params.bottomMargin;
            final int bottom = top + mDivider.getIntrinsicHeight();
            mDivider.setBounds(left, top, right, bottom);
            mDivider.draw(c);
        }
    }

    public void drawHorizontal(Canvas c, RecyclerView parent) {
        final int top = parent.getPaddingTop();
        final int bottom = parent.getHeight() - parent.getPaddingBottom();

        final int childCount = parent.getChildCount();
        for (int i = 0; i < childCount; i++) {
            final View child = parent.getChildAt(i);
            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                    .getLayoutParams();
            final int left = child.getRight() + params.rightMargin;
            final int right = left + mDivider.getIntrinsicHeight();
            mDivider.setBounds(left, top, right, bottom);
            mDivider.draw(c);
        }
    }

    @Override
    public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
        if (mOrientation == VERTICAL_LIST) {
            outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
        } else {
            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
        }
    }
}



使用
//添加分割线
          recyclerView.addItemDecoration(new DividerItemDecoration(this,
                    DividerItemDecoration.VERTICAL_LIST));




5 设置RecyclerView的滚动条
纵向显示
android:scrollbars="vertical"


横向显示
android:scrollbars="horizontal"


隐藏
android:scrollbars="none"
分享到:
评论

相关推荐

    RecycleView初识

    在Android开发中,RecycleView是一个非常重要的控件,它为开发者提供了强大的列表展示功能,大大提升了应用的性能和用户体验。本篇文章将深入探讨RecycleView的基础知识、使用方法以及其实现原理。 RecycleView是...

    RecycleView--eclipse

    把这个复制到项目的libs目录下就可以在eclipse中使用RecycleView了

    RecycleView 嵌套RecycleView 来实现购物车页面

    在适配器(Adapter)中,你需要为每个父项和子项创建不同的ViewHolder类,并实现对应的绑定数据方法。 2. **全选与反选功能**:可以设置一个全局变量表示全选状态,然后在主RecycleView的每个子项上添加一个...

    横向RecycleView-左拉更新

    标题“横向RecycleView-左拉更新”指的是在水平滚动的RecycleView中实现左滑动更新数据的功能。这个特性常用于新闻应用、社交媒体应用等,让用户在浏览内容时可以方便地获取最新信息。 首先,我们需要了解如何创建...

    recycleview

    `RecycleView`是Android开发中的一个重要组件,它在应用设计中扮演着核心角色,尤其在数据展示方面。本篇文章将深入探讨`RecycleView`的原理、使用方法以及如何实现一个简单的联系人列表功能。 ### 1. `RecycleView...

    DataBinding在recycleview中的使用

    然后,我们在`onCreate`或`onCreateView`方法中初始化RecyclerView,并设置适配器: ```java public class MyViewModel extends ViewModel { private List&lt;Item&gt; items; private RecyclerView.Adapter adapter; ...

    RecycleView_Preview-master.zip

    要实现这个效果,开发者首先需要在布局文件中添加RecyclerView,并为它设置合适的LayoutManager。在这个案例中,可能使用的是LinearLayoutManager,因为它可以实现垂直或水平滚动,适合底部菜单栏的场景。此外,...

    RecycleView

    在实际项目中,RecycleView还可以结合DiffUtil来自动检测数据集的变化,只更新必要的视图,进一步提升性能。同时,通过使用自定义布局管理器、动画和装饰,开发者可以打造出极具个性化的用户界面。 总的来说,...

    recycleview-eclipse版本

    5. 最后,可能需要在项目的AndroidManifest.xml中添加对应的权限和依赖声明,确保RecycleView能够正常运行。 三、RecycleView的使用 1. 布局创建:在XML布局文件中,使用替换原来的,并设置相应的属性,如layout_...

    RecycleView-上拉加载-下拉刷新

    在Android开发中,`RecycleView`是一种高效的数据视图组件,它替代了之前的ListView,因为RecycleView在性能和灵活性方面有显著提升。本文将深入探讨RecycleView的上拉加载(Load More)和下拉刷新(Pull to Refresh...

    Android 5.0 RecycleView demo

    在Android开发中,RecycleView是一个非常重要的组件,尤其在Android 5.0版本中引入后,它成为了处理大量数据列表的首选控件。RecycleView的出现替代了原本广泛使用的ListView,因为其更高的性能和更强大的灵活性。...

    RecycleView实现内部拖拽排序和两个RecycleView拖拽对调条目的Demo

    在`Adapter`中,我们需要为每个条目创建一个`ViewHolder`,它持有所需的视图,并在`onBindViewHolder()`方法中绑定数据。为了支持拖拽,`ViewHolder`需要扩展`RecyclerView.ViewHolder`并实现`Draggable`接口,以便...

    手写RecycleView的Demo

    在适配器的构造函数中接收数据集,并在需要时调用`notifyDataSetChanged()`或`notifyItemInserted()`等方法通知RecyclerView数据已更新。 8. 设置RecyclerView 最后,在Activity或Fragment中设置RecyclerView,包括...

    RecycleView嵌套RecycleView

    - 在父级Adapter中,为每个父级item的绑定方法(onBindViewHolder)中,初始化子级RecyclerView并设置其Adapter。 - 处理滚动事件,确保嵌套滚动的平滑性和一致性。可以使用`NestedScrollView`或`...

    recycleview 嵌套recycleview 滑动焦点问题

    在Android开发过程中,经常会遇到需要在一个`RecyclerView`内部嵌套另一个`RecyclerView`的情况,例如展示商品分类时,每一类商品下又有多个子项。这种场景下,我们希望用户既能滑动外部的`RecyclerView`来查看不同...

    Recycleview拖动

    - **数据源变更**:在`onMove()`方法中,我们不仅要更新RecyclerView的数据结构,还需要确保数据源(通常是ArrayList或其他集合类型)的顺序与视图对应。 - **刷新视图**:在数据源更新后,通过调用`adapter....

    详细的RecycleView案例(demo)

    5. **设置数据源**:在Activity或Fragment中,创建数据列表,然后通过Adapter的`notifyDataSetChanged()`或`notifyItemInserted/Removed/Changed()`方法通知Adapter数据已更新。 6. **布局管理器**:RecycleView...

    RecycleView 实现复杂首页布局

    自定义 LayoutManager 需要重写关键方法,如 onLayoutChildren(),在这个方法中计算每个视图的位置。 四、AppHomeRecyclerView 示例 根据你提供的文件名 "AppHomeRecyclerView",这可能是你已经实现的 RecycleView...

    一个简单的recycleview上拉加载和简单的mvp demo实例

    - RecycleView 首先需要在布局文件中声明,并设置其布局管理器(LayoutManager),如LinearLayoutManager 或 GridLayoutManager。 - 创建自定义的ViewHolder 类,继承自 RecyclerView.ViewHolder,持有每个列表项...

Global site tag (gtag.js) - Google Analytics