# PinnedSectionItemDecoration **Repository Path**: chinasoft_ohos/PinnedSectionItemDecoration ## Basic Information - **Project Name**: PinnedSectionItemDecoration - **Description**: 实现ListContainer滑动可悬停的标题栏 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 3 - **Created**: 2021-06-04 - **Last Updated**: 2024-11-08 ## Categories & Tags **Categories**: harmonyos-listview **Tags**: None ## README # PinnedSectionItemDecoration #### 项目介绍 - 项目名称:PinnedSectionItemDecoration - 所属系列:openharmony的第三方组件适配移植 - 功能:实现ListContainer滑动可悬停的标题栏 - 项目移植状态:上下滑动列表会偶现图片错乱 - 调用差异:原ListContainer的ItemDecoration替换为ListContainer的DependentLayout布局对象覆盖 - 开发版本:sdk6,DevEco Studio 2.2 Beta1 - 基线版本:master分支 #### 效果演示 ![输入图片说明](https://gitee.com/chinasoft_ohos/PinnedSectionItemDecoration/raw/master/gif/demo.gif "demo.gif") #### 安装教程 1.在项目根目录下的build.gradle文件中, ```txt allprojects { repositories { maven { url 'https://s01.oss.sonatype.org/content/repositories/releases/' } } } ``` 2.在entry模块的build.gradle文件中, ```gradle dependencies { implementation('com.gitee.chinasoft_ohos:PinnedSectionItemDecoration:1.0.0') ...... } ``` 在sdk6,DevEco Studio 2.2 Beta1下项目可直接运行 如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 #### 使用说明 library中定义了一个MoveMethod类,构造中传递的参数是需要悬停的ListContainer,需要悬停的Text和Image,后续会根据Text或Image的高度来进行悬停操作 ```txt public MoveMethod(ListContainer listContainer,Text pinText,Image pinImage){ this.listContainer = listContainer; this.show_header_item_content_text = pinText; this.show_header_item_image = pinImage; } ``` 需要注意setListSize()和setLittleListNum()两个方法,各自需要传递集合的长度,如果多层集合,则需要传递最内层集合的长度,目前最多只支持两层集合 ```java public void setListSize(int listSize){ this.listSize = listSize; } public void setLittleSize(int littleSize){ this.littleSize = littleSize; } ``` 切换布局后需要调用setLayoutId(),目前定义了5种布局,使用了4种,分别是线性(LinearLayout),网格(GrideLayout),瀑布(StaggeredGridLayout),小标签(LitteTitleLayout) ​```java public void setLayoutId(int layoutId){ this.layoutId = layoutId; } public int getLayoutId(){ return layoutId; } ``` 还需要将你的数据源提供进来,内部有4个集合,分别适配两种数据源,一种是实现了Category接口的,一种是实现了Model接口的,一个数据源用来使用,一个数据源用来缓存,所以设置两个数据源的方法都需要调用 ​```java public void setListDatas(List list){ this.categoryList = list; } public void setCacheListDatas(List list){ this.cacheCategoryList = list; } public void setListModels(List list){ this.models = list; } public void setCacheListModels(List list){ this.cacheModels = list; } ``` 每次切换标签后,要切换一下缓存的标签,避免标签出错,最好将缓存标签设置为数据源的第一个需要悬停的标签的值。 ```txt public void setCacheTitle(String cacheTitle){ this.cacheTitle = cacheTitle; } ``` #### 测试信息 CodeCheck代码测试无异常 CloudTest代码测试无异常 病毒安全检测通过 当前版本demo功能与原组件基本无差异 #### 版本迭代 - 1.0.0 #### 版权和许可信息 ``` Copyright 2016 oubowu Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ```