RecycleView使用问题梳理

1)添加headview和footerview

思路:参考ListView的addHeadView方法封装构建一个Adapter封装类,在adpter中维护一个HeaderView和FooterView数组,在onCreateViewHolder方法中为每一个HeaderView构建一个ViewHolder。

       正解:github大神提供的组件借用之,哈哈。路径奉上:

https://github.com/cundong/HeaderAndFooterRecyclerView/blob/master/library/src/main/java/com/cundong/recyclerview/HeaderAndFooterRecyclerViewAdapter.java


2)检测RecycleView是否滑动到底部:

思路:RecycleView可以用提供多种布局如线性布局,网格布局以及瀑布流布局。这种不同形式的布局是通过对应布局管理实现的。通过这个这个布局管理器我们可以获取到第一个可见视图的position,最后一个可见视图的position等信息。解决这个问题的思路就是在滑动过程中判断最后一个可见视图的position和getItemCount()返回将要构建的视图总数进行比较,判断是否到达底部,代码附上:

 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                if (newState==0){
                    //0为idle状态
                    RecyclerView.LayoutManager layoutManager = mRecyclerView.getLayoutManager();
                    if (layoutManager instanceof StaggeredGridLayoutManager){
                        StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager;
                        int column = staggeredGridLayoutManager.getColumnCountForAccessibility(null,null);
                        int[] positions = new int[column];
                        staggeredGridLayoutManager.findLastCompletelyVisibleItemPositions(positions);
 
                        for (int i =0;i<positions.length;i++){
                            if (positions[i]>=staggeredGridLayoutManager.getItemCount()-column
                                    && staggeredGridLayoutManager.findViewByPosition(positions[i]).getBottom()<=
                                    mRecyclerView.getHeight()){
                                Log.d("log","到底了");
                                break;
                            }
                        }
 
                    }else if (layoutManager instanceof  LinearLayoutManager){
                        LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager;
                        int position = linearLayoutManager.findLastVisibleItemPosition();
                        if (position==linearLayoutManager.getItemCount()-1&&
                                linearLayoutManager.findViewByPosition(position).getBottom()<= mRecyclerView.getHeight()){
                            Log.d("log","到底了");
                        }
                    }
                }
                super.onScrollStateChanged(recyclerView, newState);
            }
        });

3)对RecycleView添加中的item添加监听:

由于RecycleView没有提供ListView的onItemSelectedLisenter方法,所以需要单独自己实现。解决这个问题的方法是adpater在构建ViewHolder对象的时候为itemView添加一个OnClickListener监听,然后实现这个监听接口相关功能。代码如下:

public class ViewHolder extends RecyclerView.ViewHolder{
        public TextView textView;
        public ImageView imageView;
        public TextView displayTextView;
 
        public ViewHolder(View itemView) {
            super(itemView);
           itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mOnItemClickedListener.onItemClicked(v,getPosition());
                }
            });
            textView = (TextView) itemView.findViewById(R.id.news_item_title); 
            imageView = (ImageView) itemView.findViewById(R.id.news_item_imageview); 	
            displayTextView = (TextView) itemView.findViewById(R.id.display_date); 
       } 
}




另外记录另外一个问题:

  发现另外一个现象任何视图的Clickable属性设置false的时候一旦添加了加添这个false属性便会失效。列如:

itemView.setClickable(false);
itemView.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		mOnItemClickedListener.onItemClicked(v,getPosition());
	}
});

主要是应为一旦调用了temView.setOnClickListener对应视图的Clickable属性就会设置true:

android中的对应的代码如下:

 public void setOnClickListener(@Nullable OnClickListener l) {
        if (!isClickable()) {
            setClickable(true);
        }
        getListenerInfo().mOnClickListener = l;
    }

所以切记不要在布局中将clickable设置false然后在某个地方调用setOnClickListener,然后出现一个神一样现象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值