鸿蒙轻量级数据库 DatabaseHelper基本用法
<p><img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/cd23bbebc870c7bd1f64d7f94dbb7874.jpg" width="auto"></p>
<h3>
前言:</h3>
<p>
各位同学大家好有段时间没有给大家更新文章,具体多久我也不记得,最近在学习鸿蒙开发写了一些小demo 就想着分享给家 今天要讲的是 ListContainer 鸿蒙OS开发中的 列表组件</p>
<h3>
效果图:</h3>
<center>
<img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" src="https://zhuji.jb51.net/uploads/img/202305/bd95d819660ddd98b976cdfadbda02fa.jpg">
</center>
<center>
<img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" src="https://zhuji.jb51.net/uploads/img/202305/9e6bb165f7fe4318d232ec18e8e111fa.jpg">
</center>
<center>
<img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" src="https://zhuji.jb51.net/uploads/img/202305/9410c4c152ac236fbcf6bb5fd91ed83f.jpg">
</center>
<h3>
具体实现:</h3>
<p>
ListContainer是用来呈现连续、多行数据的组件,包含一系列相同类型的列表项。</p>
<p>
ListContainer的使用方法</p>
<p>
1.在layout目录下的xml文件中创建ListContainer。<!--?xml version="1.0" encoding="utf-8"?--></p>
<ol class="dp-sql">
<li class="alt">
<span><span><?xml version=</span><span class="string">"1.0"</span><span> encoding=</span><span class="string">"utf-8"</span><span>?> </span></span>
</li>
<li>
<span><DirectionalLayout </span>
</li>
<li class="alt">
<span> xmlns:ohos=<span class="string">"http://schemas.huawei.com/res/ohos"</span><span> </span></span>
</li>
<li>
<span> ohos:height=<span class="string">"match_parent"</span><span> </span></span>
</li>
<li class="alt">
<span> ohos:width=<span class="string">"match_parent"</span><span> </span></span>
</li>
<li>
<span> ohos:orientation=<span class="string">"vertical"</span><span>> </span></span>
</li>
<li class="alt">
<span> <ListContainer </span>
</li>
<li>
<span> ohos:id=<span class="string">"$+id:list_container"</span><span> </span></span>
</li>
<li class="alt">
<span> ohos:height=<span class="string">"match_parent"</span><span> </span></span>
</li>
<li>
<span> ohos:width=<span class="string">"match_parent"</span><span> </span></span>
</li>
<li class="alt">
<span> ohos:layout_alignment=<span class="string">"horizontal_center"</span><span>/> </span></span>
</li>
<li>
<span></DirectionalLayout> </span>
</li>
</ol>
<p>
2.在layout目录下新建xml文件(例:item_sample.xml),作为ListContainer的子布局<!--?xml version="1.0" encoding="utf-8"?--></p>
<ol class="dp-sql">
<li class="alt">
<span><span><?xml version=</span><span class="string">"1.0"</span><span> encoding=</span><span class="string">"utf-8"</span><span>?> </span></span>
</li>
<li>
<span><DirectionalLayout </span>
</li>
<li class="alt">
<span> xmlns:ohos=<span class="string">"http://schemas.huawei.com/res/ohos"</span><span> </span></span>
</li>
<li>
<span> ohos:height=<span class="string">"match_content"</span><span> </span></span>
</li>
<li class="alt">
<span> ohos:width=<span class="string">"match_parent"</span><span> </span></span>
</li>
<li>
<span> ohos:left_margin=<span class="string">"16vp"</span><span> </span></span>
</li>
<li class="alt">
<span> ohos:right_margin=<span class="string">"16vp"</span><span> </span></span>
</li>
<li>
<span> ohos:orientation=<span class="string">"vertical"</span><span>> </span></span>
</li>
<li class="alt">
<span> <Text </span>
</li>
<li>
<span> ohos:id=<span class="string">"$+id:item_index"</span><span> </span></span>
</li>
<li class="alt">
<span> ohos:height=<span class="string">"match_content"</span><span> </span></span>
</li>
<li>
<span> ohos:width=<span class="string">"match_content"</span><span> </span></span>
</li>
<li class="alt">
<span> ohos:padding=<span class="string">"4vp"</span><span> </span></span>
</li>
<li>
<span> ohos:text=<span class="string">"Item0"</span><span> </span></span>
</li>
<li class="alt">
<span> ohos:text_size=<span class="string">"20fp"</span><span> </span></span>
</li>
<li>
<span> ohos:layout_alignment=<span class="string">"center"</span><span>/> </span></span>
</li>
<li class="alt">
<span></DirectionalLayout> </span>
</li>
</ol>
<p>
3.创建SampleItem.java,作为ListContainer的数据包装类。</p>
<ol class="dp-sql">
<li class="alt">
<span><span class="keyword">public</span><span> class SampleItem { </span></span>
</li>
<li>
<span> private String <span class="keyword">name</span><span>; </span></span>
</li>
<li class="alt">
<span> <span class="keyword">public</span><span> SampleItem(String </span><span class="keyword">name</span><span>) { </span></span>
</li>
<li>
<span> this.<span class="keyword">name</span><span> = </span><span class="keyword">name</span><span>; </span></span>
</li>
<li class="alt">
<span> } </span>
</li>
<li>
<span> <span class="keyword">public</span><span> String getName() { </span></span>
</li>
<li class="alt">
<span> <span class="keyword">return</span><span> </span><span class="keyword">name</span><span>; </span></span>
</li>
<li>
<span> } </span>
</li>
<li class="alt">
<span> <span class="keyword">public</span><span> void setName(String </span><span class="keyword">name</span><span>) { </span></span>
</li>
<li>
<span> this.<span class="keyword">name</span><span> = </span><span class="keyword">name</span><span>; </span></span>
</li>
<li class="alt">
<span> } </span>
</li>
<li>
<span>} </span>
</li>
</ol>
<p>
4.ListContainer每一行可以为不同的数据,因此需要适配不同的数据结构,使其都能添加ListContainer上。创建SampleItemProvider.java,继承自RecycleItemProvider。必须重写的方法如下:</p>
<center>
<img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" src="https://zhuji.jb51.net/uploads/img/202305/ac56b6388ff9f8fec84d959ecb3b4b18.jpg">
</center>
<p>
代码示例如下:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>package com.example.listview; </span></span>
</li>
<li>
<span>import ohos.agp.components.*; </span>
</li>
<li class="alt">
<span>import java.util.List; </span>
</li>
<li>
<span>/** </span>
</li>
<li class="alt">
<span> * 创建人:xuqing </span>
</li>
<li>
<span> * 创建时间:2020年12月18日13:37:27 </span>
</li>
<li class="alt">
<span> * 类说明: 适配器 </span>
</li>
<li>
<span> * </span>
</li>
<li class="alt">
<span> * </span>
</li>
<li>
<span> * </span>
</li>
<li class="alt">
<span> */ </span>
</li>
<li>
<span><span class="keyword">public</span><span> class SampleItemProvider extends RecycleItemProvider { </span></span>
</li>
<li class="alt">
<span> private List<SampleItem> list; </span>
</li>
<li>
<span> private MainAbility slice; </span>
</li>
<li class="alt">
<span> <span class="keyword">public</span><span> SampleItemProvider(List<SampleItem> list, MainAbility slice) { </span></span>
</li>
<li>
<span> this.list = list; </span>
</li>
<li class="alt">
<span> this.slice = slice; </span>
</li>
<li>
<span> } </span>
</li>
<li class="alt">
<span> @Override </span>
</li>
<li>
<span> <span class="keyword">public</span><span> </span><span class="keyword">int</span><span> getCount() { </span></span>
</li>
<li class="alt">
<span> <span class="keyword">return</span><span> list.</span><span class="keyword">size</span><span>(); </span></span>
</li>
<li>
<span> } </span>
</li>
<li class="alt">
<span> @Override </span>
</li>
<li>
<span> <span class="keyword">public</span><span> Object getItem(</span><span class="keyword">int</span><span> position) { </span></span>
</li>
<li class="alt">
<span> <span class="keyword">return</span><span> list.get(position); </span></span>
</li>
<li>
<span> } </span>
</li>
<li class="alt">
<span> @Override </span>
</li>
<li>
<span> <span class="keyword">public</span><span> long getItemId(</span><span class="keyword">int</span><span> position) { </span></span>
</li>
<li class="alt">
<span> <span class="keyword">return</span><span> position; </span></span>
</li>
<li>
<span> } </span>
</li>
<li class="alt">
<span> @Override </span>
</li>
<li>
<span> <span class="keyword">public</span><span> Component getComponent(</span><span class="keyword">int</span><span> position, Component convertComponent, ComponentContainer componentContainer) { </span></span>
</li>
<li class="alt">
<span> if (convertComponent== <span class="op">null</span><span>) { </span></span>
</li>
<li>
<span> Component cpt = LayoutScatter.getInstance(slice).parse(ResourceTable.Layout_item_sample,<span class="op">null</span><span>,</span><span class="keyword">false</span><span>); </span></span>
</li>
<li class="alt">
<span> SampleItem sampleItem = list.get(position); </span>
</li>
<li>
<span> Text text = (Text) cpt.findComponentById(ResourceTable.Id_item_index); </span>
</li>
<li class="alt">
<span> text.setText(sampleItem.getName()); </span>
</li>
<li>
<span> <span class="keyword">return</span><span> cpt; </span></span>
</li>
<li class="alt">
<span> } <span class="keyword">else</span><span> { </span></span>
</li>
<li>
<span> <span class="keyword">return</span><span> convertComponent; </span></span>
</li>
<li class="alt">
<span> } </span>
</li>
<li>
<span> } </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
5.在Java代码中添加ListContainer的数据,并适配其数据结构。</p>
<ol class="dp-sql">
<li class="alt">
<span><span>@Override </span></span>
</li>
<li>
<span> <span class="keyword">public</span><span> void onStart(Intent intent) { </span></span>
</li>
<li class="alt">
<span> super.onStart(intent); </span>
</li>
<li>
<span> super.setUIContent(ResourceTable.Layout_ability_main); </span>
</li>
<li class="alt">
<span> initListContainer(); </span>
</li>
<li>
<span> } </span>
</li>
<li class="alt">
<span> private void initListContainer() { </span>
</li>
<li>
<span> ListContainer listContainer = (ListContainer) findComponentById(ResourceTable.Id_list_container); </span>
</li>
<li class="alt">
<span> List<SampleItem> list = getData(); </span>
</li>
<li>
<span> SampleItemProvider sampleItemProvider = new SampleItemProvider(list,this); </span>
</li>
<li class="alt">
<span> listContainer.setItemProvider(sampleItemProvider); </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> listContainer.setItemClickedListener(new ListContainer.ItemClickedListener() { </span>
</li>
<li>
<span> @Override </span>
</li>
<li class="alt">
<span> <span class="keyword">public</span><span> void onItemClicked(ListContainer listContainer, Component component, </span><span class="keyword">int</span><span> i, long l) { </span></span>
</li>
<li>
<span> SampleItem item = (SampleItem) listContainer.getItemProvider().getItem(i); </span>
</li>
<li class="alt">
<span> new ToastDialog(MainAbility.this) </span>
</li>
<li>
<span> .setText(<span class="string">"你点点击是:"</span><span>+item.getName()) </span></span>
</li>
<li class="alt">
<span> // Toast显示在界面中间 </span>
</li>
<li>
<span> .setAlignment(LayoutAlignment.BOTTOM) </span>
</li>
<li class="alt">
<span> .show(); </span>
</li>
<li>
<span> } </span>
</li>
<li class="alt">
<span> }); </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> listContainer.setItemLongClickedListener(new ListContainer.ItemLongClickedListener() { </span>
</li>
<li>
<span> @Override </span>
</li>
<li class="alt">
<span> <span class="keyword">public</span><span> boolean onItemLongClicked(ListContainer listContainer, Component component, </span><span class="keyword">int</span><span> i, long l) { </span></span>
</li>
<li>
<span> SampleItem item = (SampleItem) listContainer.getItemProvider().getItem(i); </span>
</li>
<li class="alt">
<span> new ToastDialog(MainAbility.this) </span>
</li>
<li>
<span> .setText(<span class="string">"长按事件点击:"</span><span>+item.getName()) </span></span>
</li>
<li class="alt">
<span> // Toast显示在界面中间 </span>
</li>
<li>
<span> .setAlignment(LayoutAlignment.BOTTOM) </span>
</li>
<li class="alt">
<span> .show(); </span>
</li>
<li>
<span> <span class="keyword">return</span><span> </span><span class="keyword">false</span><span>; </span></span>
</li>
<li class="alt">
<span> } </span>
</li>
<li>
<span> }); </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> } </span>
</li>
<li class="alt">
<span> private ArrayList<SampleItem> getData() { </span>
</li>
<li>
<span> ArrayList<SampleItem> list = new ArrayList<>(); </span>
</li>
<li class="alt">
<span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = 0; i <= 10; i++) { </span></span>
</li>
<li>
<span> list.<span class="keyword">add</span><span>(new SampleItem(</span><span class="string">"item"</span><span>+i)); </span></span>
</li>
<li class="alt">
<span> } </span>
</li>
<li>
<span> <span class="keyword">return</span><span> list; </span></span>
</li>
<li class="alt">
<span> } </span>
</li>
</ol>
<p>
假数据</p>
<ol class="dp-sql">
<li class="alt">
<span><span>private ArrayList<SampleItem> getData() { </span></span>
</li>
<li>
<span> ArrayList<SampleItem> list = new ArrayList<>(); </span>
</li>
<li class="alt">
<span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = 0; i <= 10; i++) { </span></span>
</li>
<li>
<span> list.<span class="keyword">add</span><span>(new SampleItem(</span><span class="string">"item"</span><span>+i)); </span></span>
</li>
<li class="alt">
<span> } </span>
</li>
<li>
<span> <span class="keyword">return</span><span> list; </span></span>
</li>
<li class="alt">
<span> } </span>
</li>
</ol>
<p>
显示效果:</p>
<center>
<img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" src="https://zhuji.jb51.net/uploads/img/202305/bd95d819660ddd98b976cdfadbda02fa.jpg">
</center>
<h3>
ListContainer的常用设置</h3>
<p>
item 子布局 的点击事件</p>
<ol class="dp-sql">
<li class="alt">
<span><span>listContainer.setItemClickedListener(new ListContainer.ItemClickedListener() { </span></span>
</li>
<li>
<span> @Override </span>
</li>
<li class="alt">
<span> <span class="keyword">public</span><span> void onItemClicked(ListContainer listContainer, Component component, </span><span class="keyword">int</span><span> i, long l) { </span></span>
</li>
<li>
<span> SampleItem item = (SampleItem) listContainer.getItemProvider().getItem(i); </span>
</li>
<li class="alt">
<span> new ToastDialog(MainAbility.this) </span>
</li>
<li>
<span> .setText(<span class="string">"你点点击是:"</span><span>+item.getName()) </span></span>
</li>
<li class="alt">
<span> // Toast显示在界面中间 </span>
</li>
<li>
<span> .setAlignment(LayoutAlignment.BOTTOM) </span>
</li>
<li class="alt">
<span> .show(); </span>
</li>
<li>
<span> } </span>
</li>
<li class="alt">
<span> }); </span>
</li>
</ol>
<p>
效果如下</p>
<center>
<img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" src="https://zhuji.jb51.net/uploads/img/202305/9e6bb165f7fe4318d232ec18e8e111fa.jpg">
</center>
<p>
item 子布局 的长按事件</p>
<ol class="dp-sql">
<li class="alt">
<span><span>listContainer.setItemLongClickedListener(new ListContainer.ItemLongClickedListener() { </span></span>
</li>
<li>
<span> @Override </span>
</li>
<li class="alt">
<span> <span class="keyword">public</span><span> boolean onItemLongClicked(ListContainer listContainer, Component component, </span><span class="keyword">int</span><span> i, long l) { </span></span>
</li>
<li>
<span> SampleItem item = (SampleItem) listContainer.getItemProvider().getItem(i); </span>
</li>
<li class="alt">
<span> new ToastDialog(MainAbility.this) </span>
</li>
<li>
<span> .setText(<span class="string">"长按事件点击:"</span><span>+item.getName()) </span></span>
</li>
<li class="alt">
<span> // Toast显示在界面中间 </span>
</li>
<li>
<span> .setAlignment(LayoutAlignment.BOTTOM) </span>
</li>
<li class="alt">
<span> .show(); </span>
</li>
<li>
<span> <span class="keyword">return</span><span> </span><span class="keyword">false</span><span>; </span></span>
</li>
<li class="alt">
<span> } </span>
</li>
<li>
<span> }); </span>
</li>
</ol>
<p>
效果如下</p>
<center>
<img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" src="https://zhuji.jb51.net/uploads/img/202305/9410c4c152ac236fbcf6bb5fd91ed83f.jpg">
</center>
<p>
ListContainer的样式设置</p>
<p>
表2 ListContainer的样式设置</p>
<center>
<img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" src="https://zhuji.jb51.net/uploads/img/202305/736b2d1dbe439ee7cbf58a83c2d54a61.jpg">
</center>
<p>
设置ListContainer的布局方向:orientation设置为“horizontal”,表示横向布局;orientation设置为“vertical”,表示纵向布局。默认为纵向布局</p>
<p>
在xml中设置:</p>
<ol class="dp-sql">
<li class="alt">
<span><span><ListContainer ... ohos:orientation=</span><span class="string">"horizontal"</span><span>/> </span></span>
</li>
</ol>
<p>
在Java代码中设置</p>
<ol class="dp-sql">
<li class="alt">
<span><span>listContainer.setOrientation(Component.HORIZONTAL); </span></span>
</li>
</ol>
<p>
横向滑动效果如图</p>
<center>
<img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" src="https://zhuji.jb51.net/uploads/img/202305/743bcbf886d7a2d1be124adc5d91ef2e.jpg">
</center>
<p>
设置ListContainer的开始和结束偏移量</p>
<ol class="dp-sql">
<li class="alt">
<span><span>listContainer.setContentOffSet(32,16); </span></span>
</li>
</ol>
<p>
为了便于观察,分别在子布局和ListContainer布局中添加背景色:</p>
<p>
在item_sample.xml的根布局中添加背景色。</p>
<p>
<directionallayout ohos:background_element="#FAEBD7"></directionallayout></p>
<ol class="dp-sql">
<li class="alt">
<span><span><DirectionalLayout ... ohos:background_element=</span><span class="string">"#FAEBD7"</span><span>> ...</DirectionalLayout> </span></span>
</li>
</ol>
<p>
在ListContainer布局文件中添加背景色。</p>
<ol class="dp-sql">
<li class="alt">
<span><span><ListContainer ... ohos:background_element=</span><span class="string">"#FFDEAD"</span><span>/> </span></span>
</li>
</ol>
<p>
设置列表容器的开始偏移量为32,结束偏移量为16效果</p>
<center>
<img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" src="https://zhuji.jb51.net/uploads/img/202305/c96bf29d5ac8121b21a8b1adc226aca3.jpg">
</center>
<p>
设置回弹效果。</p>
<p>
在xml中设置:</p>
<ol class="dp-sql">
<li class="alt">
<span><span><ListContainer ... ohos:rebound_effect=</span><span class="string">"true"</span><span>/> </span></span>
</li>
</ol>
<p>
在Java代码中设置</p>
<ol class="dp-sql">
<li class="alt">
<span><span>listContainer.setReboundEffect(</span><span class="keyword">true</span><span>); </span></span>
</li>
</ol>
<center>
<img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" src="https://zhuji.jb51.net/uploads/img/202305/648f8c458c46d2b86d31e0b9f278bfe4.jpg">
</center>
<p>
在开启回弹效果后,可以调用setReboundEffectParams()方法调整回弹效果。</p>
<ol class="dp-sql">
<li class="alt">
<span><span>listContainer.setReboundEffectParams(40,0.6f,20); </span></span>
</li>
</ol>
<p>
设置着色器颜色。</p>
<p>
在xml中设置:</p>
<ol class="dp-sql">
<li class="alt">
<span><span><ListContainer ... ohos:shader_color=</span><span class="string">"#90EE90"</span><span>/> </span></span>
</li>
</ol>
<p>
在Java代码中设置:</p>
<ol class="dp-sql">
<li class="alt">
<span><span>listContainer.setShaderColor(new Color(Color.getIntColor(</span><span class="string">"#90EE90"</span><span>))); </span></span>
</li>
</ol>
<p>
效果如下图</p>
<center>
<img title="鸿蒙轻量级数据库 DatabaseHelper基本用法" alt="鸿蒙轻量级数据库 DatabaseHelper基本用法" src="https://zhuji.jb51.net/uploads/img/202305/511bc7142dfed001da4ed078323a3bf4.jpg">
</center>
<p>
到此鸿蒙os 列表组件 ListContainer 基础知识就讲完了</p>
<h3>
最后总结</h3>
<p>
鸿蒙 os ListContainer 列表组件基本用法和Android原生的lsitview 比较像 但是比起原生安卓的listview 更加强大 原生android 并不直接支持横向滑动 以及直接支持回弹效果 ListContainer 基本用法对于安卓程序员来说比较好上手 看一下api 学习下本就能灵活运用了 以上就是我个人在学习了2天的鸿蒙os开发 ListContainer 基础总结</p>
<p>
原文链接:https://harmonyos.51cto.com</p>
頁:
[1]