Recyclerview使用与踩坑

使用


  • recyclerview基于v7包,需要现在项目中引入v7或单独引入recyclerview.
  • 去除滑动到边缘自带的阴影效果
<android.support.v7.widget.RecyclerView
        ...
        android:overScrollMode="never"/>
  • recyclerview无自带点和触摸事件,需要自行编写接口进行监听,示例代码:
//不限于OnClickListener ,OnLongClickListener, OnTouchListener等等,任意接口
public  class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> 
implements View.OnClickListener {
    ...
    //实例化接口
    private OnItemClickListener onItemClickListener;
    @Override
    public void onClick(View v) {
        //加入自定义的接口方法
        if (onItemClickListener!=null){
            onItemClickListener.onItemClick((Integer) v.getTag());
        }
    }
    //自定义接口
    public interface OnItemClickListener{
        void onItemClick(int position);
    }
    //在activity内设置监听
    public void setOnItemClickListener(OnItemClickListener itemClickListener) {
        onItemClickListener = itemClickListener;
    }
    //给每个item设置tag
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int position) {
        ...
        viewHolder.itemView.setTag(position);
        ...
    }
    //给每个item视图设置事件监听
    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View inflate;
        inflate =...;
        inflate.setOnClickListener(this);
        ...
    }
    ...
}
  • 设置添加删除动画,默认动画添加删除为淡入淡出.继承SimpleItemAnimator重写方法可自定义动画.
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
  • 通过设置不同的LayoutManager启用不同的布局
/*
* 1. LinerLayoutManager 以垂直或者水平列表方式展示Item
* 2. GridLayoutManager 以网格方式展示Item
* 3. StaggeredGridLayoutManager 以瀑布流方式展示Item
*/
mRecyclerView.setLayoutManager(mLayoutManager);

踩坑


  1. Recyclerview高度根据内部item数目进行随动时,即高度设置为wrap_content,当绑定的adapter数据源size由1变为0时,notifyDataSetChanged()后最后一条数据仍在显示,add一条数据后再次notifyDataSetChanged(),数据会替换为新增的数据.
    解决:高度设置为任意固定值可解决.
  2. 由于组件重用导致数据混乱傻瓜解决方法
    adapter内viewholder设置setIsRecyclable为false,即不重用组件,在item数目少时可有效解决.
    java
    mHolder.setIsRecyclable(false);

持续更新

要将 AppBarLayout 与 RecyclerView 使用,需要在布局文件中将它们嵌套在一起。具体实现步骤如下: 1. 在布局文件中定义 AppBarLayout 和 Toolbar 控件,用于显示顶部工具栏和标题栏。 ```xml <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" /> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout> ``` 2. 在 AppBarLayout 内部添加一个可折叠式的标题栏控件(CollapsingToolbarLayout),用于显示标题和背景图片等内容。 ```xml <android.support.design.widget.CollapsingToolbarLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:id="@+id/image_view" android:layout_width="match_parent" android:layout_height="200dp" android:scaleType="centerCrop" android:src="@drawable/header_image" app:layout_collapseMode="parallax" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" /> </android.support.design.widget.CollapsingToolbarLayout> ``` 3. 在布局文件中定义 RecyclerView 控件,用于显示列表内容。 ```xml <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> ``` 4. 在相应的 Activity 或 Fragment 中获取 RecyclerView 对象,并设置 Adapter 和 LayoutManager。 ```java RecyclerView recyclerView = findViewById(R.id.recycler_view); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(layoutManager); ``` 5. 在 AppBarLayout 中设置滚动监听器(OnOffsetChangedListener),根据滚动距离和状态改变工具栏的样式、大小和位置等效果。 ```java AppBarLayout appBarLayout = findViewById(R.id.app_bar_layout); appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { // 根据 verticalOffset 计算工具栏的高度和透明度等属性 // 更新工具栏的样式和位置等 } }); ``` 这样就可以实现一个带有 AppBarLayout 和 RecyclerView 的可滚动界面了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值