鸿蒙中想要实现安卓的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"/>
从上述代码中看到 有一个 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);
}
}
}
在 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();
}
});
通过上述代码可以看到,列表的点击事件通过 列表控件来获取,我一般在安卓开发中都是通过适配器来获取的,这边是有些区别的,刷新适配器同样也是有 notify 方法使用
根据源码可以看到
这里也是支持对单个 item 操作的
那么列表想要实现 几行几列怎么实现呢,安卓可以动态设置布局管理器,我们鸿蒙当然也不例外,就项目而言,我想要实现 两行,每行显示四个如何实现呢
ListContainer lcList = (ListContainer) cpt.findComponentById(ResourceTable.Id_lc_list);
TableLayoutManager layoutManager = new TableLayoutManager();
layoutManager.setColumnCount(4);
lcList.setLayoutManager(layoutManager);
通过上述代码可以看到我使用了 setColumnCount 方法,每行显示四个,此时我只要确保传入适配器的数量为八个就能实现 两行每行显示四个 总共八个子控件的效果,我们点开表格管理器看一下
果然不出所料,我既然能设置每行数量,也是能设置列数的,这里等你深入探索了
以上就是我在鸿蒙项目如何使用列表的过程了~