Android开发AndroidUI

RecycleView多种布局显示

2016-12-09  本文已影响3344人  TheTwo

RecycleView多种布局显示


1.前言

2.多布局显示

RecycleView.Adapter也提供了getItemViewType方法,此方法和ListView加载多布局一样。我们只要在该方法中判断某个位置下返回某一种类型的布局即可。比如这样给RecycleView加头布局和脚布局(以下代码是伪代码):

    if(position==0){
    return  头布局类型;
    }else if(position==getitemCount()-1){
    return  脚布局类型;
    }else {
    return  默认布局类型;
    }

原理讲完了,那么接下来就应该讲讲实际的东西了。

3.需求

      请自动忽略图丑
      请自动忽略图丑

4.滑动监听

因为要模拟网络请求,这里用的是rxjava timer操作符来模拟耗时,count用来模拟数据加载完毕

    private void getData(final boolean falg) {
    if(refreshSubscribe!=null&&!refreshSubscribe.isUnsubscribed()){
        refreshSubscribe.unsubscribe();
    }
    if(count==3){
        footerViewInTextView.setText("没有更多数据了");
        return ;
    }
    if(falg){
        swRefresh.setRefreshing(true);
    }
    refreshSubscribe = Observable.timer(3, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<Long>() {
        @Override
        public void onCompleted() {
            for (int x = 30*count; x < 30*(1+count); x++) {
                 list.add("item" + x);
            }
            if(falg){
                swRefresh.setRefreshing(false);
            }
            count++;
            notifyData();
        }

        @Override
        public void onError(Throwable e) {
        }
        @Override
        public void onNext(Long aLong) {

        }
    });
}

5.更改布局列数

写之前先来看一下动图:

实现原理很简单:

    //三列
    to_gridview.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (myAdapter != null) {
                int spanSize = myAdapter.getShowOneOrThree();
                //一列变三列,三列就不管
                if (spanSize == RECYCLEVIEW_SHOW_ONE) {
                    gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                        @Override
                        public int getSpanSize(int position) {
                            if (position == 0) {
                                return 3;
                            } else if (position == 1) {
                                return 3;
                            } else if (myAdapter.getItemCount() - 1 == position) {
                                return 3;
                            } else {
                                return 1;
                            }
                        }
                    });
                    //更改状态
                    myAdapter.setShowOneOrThree(RECYCLEVIEW_SHOW_THREE);
                    //刷新视图
                    myAdapter.notifyItemRangeChanged(3, myAdapter.getItemCount());
                }
            }
        }
    });
    //一列
    to_listview.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (myAdapter != null) {
                int spanSize = myAdapter.getShowOneOrThree();
                //三列变一列,一列就不管
                if (spanSize == RECYCLEVIEW_SHOW_THREE) {
                    gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                        @Override
                        public int getSpanSize(int position) {
                            if (position == 0) {
                                return 3;
                            } else if (position == 1) {
                                return 3;
                            } else if (myAdapter.getItemCount() - 1 == position) {
                                return 3;
                            } else {
                                return 3;
                            }
                        }
                    });
                    //更改状态
                    myAdapter.setShowOneOrThree(RECYCLEVIEW_SHOW_ONE);
                    //刷新视图
                    myAdapter.notifyItemRangeChanged(3, myAdapter.getItemCount());
                }
            }
        }
    });

这里要说下gridLayoutManager.setSpanSizeLookup方法,此方法的作用是用来确定一个item占用几列。因为我们默认用的是gridViewManager
来加载三列的,所以原始视图是三列。

上一篇 下一篇

猜你喜欢

热点阅读