[带gif效果图] listview悬浮标题顶上去效果,PinnedSectionListview使用解析,快速明确达到效果

效果图:
这里写图片描述
开源框架使用的是GitHub上的开源项目 : PinnedSectionListview , 网上搜索了比较多例子都不太精简或者有所缺失,所以我这就写了一个简单精简的,方便看完可以快速投入项目使用的一个例子,希望可以帮助到大家
导入项目:

dependencies {
    compile "de.halfbit:pinned-section-listview:1.0.0"
}

布局文件(和listview一样就可以了):

  <de.halfbit.pinnedsection.PinnedSectionListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@color/sep3"
        android:fadingEdge="none"
        android:fadingEdgeLength="0dp"
        android:groupIndicator="@null"
        android:listSelector="@android:color/transparent"
        android:overScrollMode="never"
        android:scrollbars="none"/>

使用代码:

    mListview = (PinnedSectionListView) view.findViewById(R.id.listView);
        mAdapter = new VideoAdapter(mContext);
        mListview.setAdapter(mAdapter);

重点逻辑:
对数据处理:

       //拿到数组遍历,判断日期不同则集合添加数据,用来判断是否是悬浮头
            for (int i = 0; i < list.size(); i++) {
                long publishTime = list.get(i).publishTime;
                if (ageTime != publishTime) {
                    VideoInfo videoInfo = new VideoInfo();
                    videoInfo.id_ = USELESSID;
                    videoInfo.publishTime = publishTime;
                    list.add(i, videoInfo);
                    i++;
                }
                ageTime = publishTime;
            }
            mVideoInfoList.addAll(list);

判断悬浮头的逻辑:
getItemViewType(int position) ; isItemViewTypePinned(int viewType); 这两个方法是需要重点注意的,用来处理是否是悬浮头的判断.

 public class VideoAdapter extends BaseAdapter implements PinnedSectionListView.PinnedSectionListAdapter {

        private Context context;

        public VideoAdapter(Context context) {
            this.context = context;
        }

        @Override
        public int getCount() {

            return mVideoInfoList.size();
        }

        @Override
        public Object getItem(int position) {

            return mVideoInfoList.get(position);
        }

        @Override
        public long getItemId(int position) {

            return position;
        }

        @Override
        public View getView(int position, View converView, ViewGroup viewGrop) {
            ViewHolder viewHolder = null;
            VideoInfo videoInfo = mVideoInfoList.get(position);
            //判断是加悬浮头还是内容
            if (videoInfo.id_ == USELESSID) {
                if ("".equals(classifys)) {
                    if (converView == null) {
                        converView = LayoutInflater.from(mContext).inflate(R.layout.item_video_group, null);
                    }
                    TextView txtTitle = (TextView) converView.findViewById(R.id.txtTitle);
                    String time = MissUtils.getVideoPublishTime(videoInfo.publishTime);
                    txtTitle.setText(time);
                    MissUtils.applyMissFont(mContext, view);
                } else {
                    converView = new View(mContext);
                }
            } else {
                if (converView == null) {
                    converView = LayoutInflater.from(mContext).inflate(R.layout.item_video_child, null);
                    viewHolder = new ViewHolder();
                    viewHolder.icon = (ImageView) converView.findViewById(R.id.icon);
                    viewHolder.txtTime = (TextView) converView.findViewById(R.id.txtTime);
                    viewHolder.txtTitle = (TextView) converView.findViewById(R.id.txtTitle);
                    viewHolder.txtDesc = (TextView) converView.findViewById(R.id.txtDesc);
                    viewHolder.tv = (TextView) converView.findViewById(R.id.item_video_child);
                    viewHolder.Imageholder = new BaseViewHolder();
                    converView.setTag(viewHolder);
                }
                viewHolder = (ViewHolder) converView.getTag();
                if (classifys == "") {
                    viewHolder.tv.setText(videoInfo.classification + " / ");
                }

                viewHolder.Imageholder.displayColorImage2(mContext, videoInfo.photoUrl, viewHolder.icon);
                viewHolder.txtTime.setText(videoInfo.strPlayTime);
                viewHolder.txtTitle.setText(videoInfo.title);
                viewHolder.txtDesc.setText(videoInfo.subtitle);

                MissUtils.applyMissFont(mContext, converView);
            }

            return converView;
        }

        /**
         * @param position
         * @return 返回每个条目的类型 , 我这直接就用position来记录了,比较方便
         */
        public int getItemViewType(int position) {
            return position;
        }

        /**
         * 判断类型是不是悬浮头 .
         *
         * @param viewType :  getItemViewType方法的返回值
         * @return true 表示是悬浮头 , false 表示不是 ;
         */
        @Override
        public boolean isItemViewTypePinned(int viewType) {
            return mVideoInfoList.get(viewType).id_ == USELESSID;
        }
    }

    class ViewHolder {
        ImageView icon;
        TextView txtTime;
        TextView txtTitle;
        TextView txtDesc;
        TextView tv;
        BaseViewHolder Imageholder;
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值