PingedSectionListview使用解析,快速明确达到效果

来源:互联网 发布:淘宝店铺自己做模板 编辑:程序博客网 时间:2024/06/05 00:14

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

dependencies {    compile "de.halfbit:pinned-section-listview:1.0.0"}
  • 1
  • 2
  • 3

布局文件(和列表视图一样就可以了):

  <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"/>
  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

使用代码:

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

重点逻辑:
对数据处理:

       //拿到数组遍历,判断日期不同则集合添加数据,用来判断是否是悬浮头            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);
  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

判断悬浮头的逻辑:
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;    }
阅读全文
0 0