• 鸿蒙列表,类似于安卓的RecyclerView


    鸿蒙中想要实现安卓的RecyclerView效果,对于安卓开发者来说还是比较容易的的,基本写法如下:

    首先在布局文件中声明

            <ListContainer
                ohos:id="$+id:lc_list"
                ohos:top_margin="20vp"
                ohos:height="40vp"
                ohos:start_margin="150vp"
                ohos:end_margin="150vp"
                ohos:orientation="horizontal"
                ohos:width="match_parent"/>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    从上述代码中看到 有一个 orientation 属性,那就说明鸿蒙中的列表滑动方向是可以在控件中直接声明的

    鸿蒙中的列表也需要适配器如下:
    可以看到也可以写一个 ViewHolder 来做数据缓冲,这里的布局文件就不写出来了,和安卓一样的,查找控件,根据逻辑赋值处理

    public class DeviceTAdapter extends RecycleItemProvider {
    
        private List<String> data;
        LayoutScatter layoutScatter;
    
        public DeviceTAdapter(Context context, List<String> data) {
            this.data = data;
            this.layoutScatter = LayoutScatter.getInstance(context);
        }
    
        @Override
        public int getCount() {
            return data.size();
        }
    
        public Object getData(){
            return  data;
        }
    
        @Override
        public Object getItem(int i) {
            if (data != null && i >= 0 && i < data.size()) {
                return data.get(i);
            }
            return null;
        }
    
        @Override
        public long getItemId(int i) {
            return i;
        }
    
        @Override
        public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
            ViewHolder viewHolder = null;
            if (component == null) {
                component = layoutScatter.parse(ResourceTable.Layout_item_device_title, null, false);
                viewHolder = new ViewHolder((ComponentContainer) component);
                component.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) component.getTag();
            }
    
            String mD = data.get(i);
    
            viewHolder.tvItemName.setText(mD);
            return component;
        }
    
        static class ViewHolder {
            Text tvItemName;
    
            public ViewHolder(ComponentContainer componentContainer) {
                tvItemName = (Text) componentContainer.findComponentById(ResourceTable.Id_text_name);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    在 AbilitySlice 找到我们的列表控件,添加适配器即可

            ListContainer  lcList = (ListContainer) findComponentById(ResourceTable.Id_lc_list);
            DeviceTAdapter mAdapter = new DeviceTAdapter(DeviceAbilitySlice.this,areaLists);
            lcList.setItemProvider(mAdapter);
            lcList.setItemClickedListener(new ListContainer.ItemClickedListener() {
                @Override
                public void onItemClicked(ListContainer listContainer, Component component, int i, long l) {
                    //更新选中样式
                    ArrayList<AreaList> mData = (ArrayList<AreaList>) mAdapter.getData();
                    for (AreaList device: mData){
                        device.setSelect(false);
                    }
                    AreaList areaList = mData.get(i);
                    areaList.setSelect(true);
                    mAdapter.notifyDataChanged();
                }
            });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    通过上述代码可以看到,列表的点击事件通过 列表控件来获取,我一般在安卓开发中都是通过适配器来获取的,这边是有些区别的,刷新适配器同样也是有 notify 方法使用

    根据源码可以看到

    在这里插入图片描述
    这里也是支持对单个 item 操作的

    那么列表想要实现 几行几列怎么实现呢,安卓可以动态设置布局管理器,我们鸿蒙当然也不例外,就项目而言,我想要实现 两行,每行显示四个如何实现呢

    在这里插入图片描述

            ListContainer lcList = (ListContainer) cpt.findComponentById(ResourceTable.Id_lc_list);
    
           
            TableLayoutManager layoutManager = new TableLayoutManager();
            layoutManager.setColumnCount(4);
            lcList.setLayoutManager(layoutManager);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    通过上述代码可以看到我使用了 setColumnCount 方法,每行显示四个,此时我只要确保传入适配器的数量为八个就能实现 两行每行显示四个 总共八个子控件的效果,我们点开表格管理器看一下

    在这里插入图片描述

    果然不出所料,我既然能设置每行数量,也是能设置列数的,这里等你深入探索了

    以上就是我在鸿蒙项目如何使用列表的过程了~

  • 相关阅读:
    上门预约上门洗衣洗鞋店管理软件;
    硬件加速绘制基础知识
    Python实战项目:打乒乓(源码分享)(文章较短,直接上代码)
    移动元素(秋季每日一题 35)
    众昂矿业:新能源或成萤石最大应用领域
    您知道Jmeter中Redirect Automatically 和 Follow Redirects的使用场景吗?
    Sealos 私有化部署完全指南
    Python复习知识点(一)
    机器人学DH参数及利用matlab符号运算推导
    A - ASCII码排序
  • 原文地址:https://blog.csdn.net/As_thin/article/details/134270600