鸿蒙列表,类似于安卓的RecyclerView
鸿蒙中想要实现安卓的RecyclerView效果,对于安卓开发者来说还是比较容易的的,基本写法如下:
首先在布局文件中声明
<ListContainerohos: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"/>
从上述代码中看到 有一个 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);}@Overridepublic int getCount() {return data.size();}public Object getData(){return data;}@Overridepublic Object getItem(int i) {if (data != null && i >= 0 && i < data.size()) {return data.get(i);}return null;}@Overridepublic long getItemId(int i) {return i;}@Overridepublic 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);}}
}
在 AbilitySlice 找到我们的列表控件,添加适配器即可
ListContainer lcList = (ListContainer) findComponentById(ResourceTable.Id_lc_list);DeviceTAdapter mAdapter = new DeviceTAdapter(DeviceAbilitySlice.this,areaLists);lcList.setItemProvider(mAdapter);lcList.setItemClickedListener(new ListContainer.ItemClickedListener() {@Overridepublic 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();}});
通过上述代码可以看到,列表的点击事件通过 列表控件来获取,我一般在安卓开发中都是通过适配器来获取的,这边是有些区别的,刷新适配器同样也是有 notify 方法使用
根据源码可以看到
这里也是支持对单个 item 操作的
那么列表想要实现 几行几列怎么实现呢,安卓可以动态设置布局管理器,我们鸿蒙当然也不例外,就项目而言,我想要实现 两行,每行显示四个如何实现呢
ListContainer lcList = (ListContainer) cpt.findComponentById(ResourceTable.Id_lc_list);TableLayoutManager layoutManager = new TableLayoutManager();layoutManager.setColumnCount(4);lcList.setLayoutManager(layoutManager);
通过上述代码可以看到我使用了 setColumnCount 方法,每行显示四个,此时我只要确保传入适配器的数量为八个就能实现 两行每行显示四个 总共八个子控件的效果,我们点开表格管理器看一下
果然不出所料,我既然能设置每行数量,也是能设置列数的,这里等你深入探索了
以上就是我在鸿蒙项目如何使用列表的过程了~