HarmonyOS UltimateProvider简单快速的使用ListContainer

Stella981
• 阅读 312

目录:

1.简单的显示(显示一种布局)

2.简单的显示(显示多种布局)

3.嵌套ListContainer

4.ItemView中的按钮点击,等事件

UltimateProvider(适配器)简单快速的使用ListContainer而不需要写Provider。此框架是CHGAdapter的鸿蒙版本
UltimateProvider
UltimateProvider(Adapter)简单快速的使用ListContainer而不需要写Provider。此框架是CHGAdapter的鸿蒙版本

安卓(CHGAdapter)
Java:https://github.com/chenhaigang888/CHGAdapter_android
Kotlin:https://github.com/chenhaigang888/CHGAdapter_Kotlin
ios(CHGAdapter)
oc:https://github.com/chenhaigang888/CHGAdapter
swift:https://github.com/chenhaigang888/CHGAdapter_swift
HarmonyOS(UltimateProvider)
java:https://github.com/chenhaigang888/UltimateProvider
如有使用方面的问题或者交流请加QQ群:494648687

1.简单的显示(显示一种布局)
文件SongSlice.java

public class SongSlice extends AbilitySlice {
    private ListContainer listContainer;
    @Override
    protected void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_song);
        listContainer = (ListContainer) findComponentById(ResourceTable.Id_listContainer);
        listContainer.setItemProvider(new UltimateProvider(getSongs(),getContext()));
    }
    List getSongs(){
        List list = new ArrayList();
        for (int i=0; i<100; i++) {
            list.add(new SongModel("歌曲名称:"+i,"歌手:"+i));
        }
        return list;
    }
}

文件SongModel.java模型

public class SongModel implements Model {
    private String name;
    private String singer;

    @Override
    public int getResources(int position) {
        return ResourceTable.Layout_song_item;
    }
    @Override
    public Class getHolderClass(int position) {
        return SongViewHolder.class;
    }
}

文件SongViewHolder.java模型

public class SongViewHolder extends ViewHolder<SongModel> {
    private Image icon;
    private Text songName;
    private Text songer;
    public SongViewHolder(EventTransmissionListener eventTransmissionListener, Component component, UltimateProvider provider) {
        super(eventTransmissionListener, component,provider);
        icon = (Image) findComponentById(ResourceTable.Id_icon);
        songName = (Text) findComponentById(ResourceTable.Id_songName);
        songer = (Text) findComponentById(ResourceTable.Id_songer);
    }
    @Override
    public void onDataBound() {
        songName.setText(getModel().getName());
        songer.setText(getModel().getSinger());
    }
}

效果1:

HarmonyOS UltimateProvider简单快速的使用ListContainer

2.简单的显示(显示多种布局)
RecommendSlice.java

public class RecommendSlice extends AbilitySlice {
    private ListContainer listContainer;
    @Override
    protected void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_recommend);
        listContainer = (ListContainer) findComponentById(ResourceTable.Id_listContainer);
        listContainer.setItemProvider(new UltimateProvider<Model>(getData(),getContext()));
    }
    List getData(){
        List list = new ArrayList();
        for (int i=0; i<100; i++) {
            if (i %2 == 0) {
                list.add(new SongModel("歌曲名称:"+i,"歌手名称:"+i));
            } else {
                list.add(new AlbumModel("专辑名称:"+i,"歌手"));
            }
        }
        return list;
    }
}

文件AlbumModel.java模型

public class AlbumModel implements Model {
    private String name;
    private String songer;
    @Override
    public int getResources(int position) {
        return ResourceTable.Layout_album_item;
    }
    @Override
    public Class getHolderClass(int position) {
        return AlbumViewHolder.class;
    }
}

文件AlbumViewHolder.java

public class AlbumViewHolder extends ViewHolder<AlbumModel> {
    private Text name;
    private Text songer;
    public AlbumViewHolder(EventTransmissionListener eventTransmissionListener, Component component, UltimateProvider provider) {
        super(eventTransmissionListener, component,provider);
        name = (Text) findComponentById(ResourceTable.Id_name);
        songer = (Text) findComponentById(ResourceTable.Id_songer);
    }
    @Override
    public void onDataBound() {
        name.setText(getModel().getName());
        songer.setText(getModel().getSonger());
    }
}

效果2:

  HarmonyOS UltimateProvider简单快速的使用ListContainer

3.嵌套ListContainer
NestedListAbility.java

public class NestedListSlice extends AbilitySlice {
    private ListContainer listContainer;
    @Override
    protected void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_nested_list);
        listContainer = (ListContainer) findComponentById(ResourceTable.Id_listContainer);
        listContainer.setItemProvider(new UltimateProvider<Model>(getData(), getContext()));
    }
    List getData() {
        List list = new ArrayList();
        for (int i=0; i<100; i++) {
            if (i%5 == 0) {
                list.add(new SongModel("歌曲名称:"+i,"歌手:"+i));
            } else if (i%5 == 1) {
                list.add(new AlbumModel("推荐专辑:"+i,"歌手:"+i));
            } else if (i%5 == 2) {
                list.add(creageMusicData(i,i%2));
            } else {
                list.add(creageHybridData());
            }
        }
        return list;
    }
    /*创建推荐内容*/
    MusicModel creageMusicData(int position,int type){
        List list = new ArrayList();
        String title = type == 0 ? "推荐歌曲":"推荐专辑";
        for (int i=0; i< 100; i++) {
            if (type == 0) {
                list.add(new NestedSongModel("推荐歌曲:"+i,"歌手:"+i));
            } else if(type == 1){
                list.add(new NestedAlbumModel("推荐专辑:"+i,"歌手:"+i));
            }
        }
        return new MusicModel(title + position,list);
    }
    /*创建推荐内容*/
    MusicModel creageHybridData(){
        List list = new ArrayList();
        for (int i=0; i< 100; i++) {
            if (i %2 == 0) {
                list.add(new NestedSongModel("推荐歌曲:"+i,"歌手:"+i));
            } else {
                list.add(new NestedAlbumModel("推荐专辑:"+i,"歌手:"+i));
            }
        }
        return new MusicModel("推荐的歌曲+专辑",list);
    }
}

文件MusicModel.java模型

public class MusicModel implements Model {
    private String title;
    private List data;
    @Override
    public int getResources(int position) {
        return ResourceTable.Layout_music_item;
    }
    @Override
    public Class getHolderClass(int position) {
        return MusicViewHolder.class;
    }
}

文件MusicViewHolder.java

public class MusicViewHolder extends ViewHolder<MusicModel> {
    private Text title;
    private ListContainer listContainer;
    private UltimateProvider ultimateProvider;
    public MusicViewHolder(EventTransmissionListener eventTransmissionListener, Component component,UltimateProvider provider) {
        super(eventTransmissionListener, component,provider);
        title = (Text) findComponentById(ResourceTable.Id_title);
        listContainer = (ListContainer) findComponentById(ResourceTable.Id_listContainer);
        ultimateProvider = new UltimateProvider(null,getContext());
    }
    @Override
    public void onDataBound() {
        title.setText(getModel().getTitle());
        ultimateProvider.setModels(getModel().getData());
        listContainer.setItemProvider(ultimateProvider);
    }
}

效果3:

  HarmonyOS UltimateProvider简单快速的使用ListContainer

查看更多章节>>>

作者: mb5fed9a0375f80

想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com/

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表(关于日期时间时分秒显示不出来)
在使用皕杰报表设计器时,数据据里面是日期型,但当你web预览时候,发现有日期时间类型的数据时分秒显示不出来,只有年月日能显示出来,时分秒显示为0:00:00。1.可以使用tochar解决,数据集用selecttochar(flowdate,"yyyyMMddHH:mm:ss")fromtablename2.也可以把数据库日期类型date改成timestamp
Stella981 Stella981
2年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
2年前
HarmonyOS基础
目录:1.HarmonyOS应用项目结构(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fharmonyos.51cto.com%2Fposts%2F2948%23kyzg)2.第一个HarmonyOS应用(https://www.oschina.net/act
Wesley13 Wesley13
2年前
3516遥控3861智能小车系列(一)C++开发界面应用
目录:1.harmonyos的设备开发的图形图像子系统(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fharmonyos.51cto.com%2Fposts%2F3014%23kyzg)2.开始正式该应用的实现过程(https://www.oschina.n
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
JOptionPane修改图标
1.在Linux平台下.JOptionPane会显示Java默认的图标,在window平台不显示图标,如何替换这个图标了?2JOptionPane.setIcon(Icon)修改的是内容区域的icon,而不是左上角的Icon.所以需要通过修改Jdialog/Frame的图标来达到修改默认图标的问题.3.代码:if(JOptio
Stella981 Stella981
2年前
Hi3861之俄罗斯方块小游戏(附源码)
目录:一、原理(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fharmonyos.51cto.com%2Fposts%2F1995%23kyzg)二、显示(https://www.oschina.net/action/GoToLink?urlhttps%3A%2
Wesley13 Wesley13
2年前
oracle小数点前零丢失的问题
1.问题起源 oracle数据库字段值为小于1的小数时,使用char类型处理,会丢失小数点前面的0 例如0.35就变成了.35 2.解决办法:(1)用to\_char函数格式化数字显示 select    to\_char(0.338,'fm9999999990.00')fromdual; 结果:0.34