鸿蒙listview控件,Harmony应用开发之ListContainer

ListContainer是鸿蒙应用开发中常用的一种列表控件,类似于Android中的ListView,其用法和ListView用法也是极其相似,Android开发者很容易上手使用。

ListContainer的使用方法1.在layout文件中声明ListContainer控件

ohos:width="match_parent"

ohos:height="match_parent"

ohos:orientation="vertical">

ohos:id="$+id:listText"

ohos:height="match_parent"

ohos:width="match_parent"

/>

很简单,和Android中的声明控件很相似。

2.定义列表控件的适配器RecycleItemProvider

在Android中我们用ListView肯定会用到适配器Adapter,当然在鸿蒙中也有类似的适配器RecycleItemProvider,其用法和Android中的适配器极其相似:

public class ListProvider extends RecycleItemProvider {

private List data;

LayoutScatter layoutScatter;

public ListProvider(Context context, List data) {

this.data = data;

this.layoutScatter = LayoutScatter.getInstance(context);

}

@Override

public int getCount() {

return data.size();

}

@Override

public long getItemId(int i) {

return i;

}

@Override

public Component getComponent(int i, Component component, ComponentContainer componentContainer) {

ViewHolder viewHolder = null;

//component相当于Android中的view,其他的和Android中ListView的适配器adapter差不多。

// 名字区别也不大,不过Android中ListView基本被淘汰了。

if (component == null) {

component = layoutScatter.parse(ResourceTable.Layout_item_layout, null, false);

viewHolder = new ViewHolder((ComponentContainer) component);

component.setTag(viewHolder);

} else {

viewHolder = (ViewHolder) component.getTag();

}

viewHolder.tvItemName.setText(data.get(i));

return component;

}

/**

* 类似于Android中的listView缓存。

* 将已经显示在屏幕上的item缓存在ViewHolder中,下次再次出现直接从缓存中读取

*/

static class ViewHolder {

Text tvItemName;

public ViewHolder(ComponentContainer componentContainer) {

tvItemName = (Text) componentContainer.findComponentById(ResourceTable.Id_tvItemName);

}

}

}

其中ViewHolder是用来实现ListContainer的缓存的,这个和Android中是一摸一样的。注释也有写。

3.在Ability中给ListContainer设置数据

先在Ability中声明ListContainer对象,然后将ListProvider 对象设置进ListContainer中,显示列表数据:

package com.caojing.harmonyfrist.slice;

import com.caojing.harmonyfrist.ResourceTable;

import com.caojing.harmonyfrist.provider.ListProvider;

import ohos.aafwk.ability.AbilitySlice;

import ohos.aafwk.content.Intent;

import ohos.agp.components.Component;

import ohos.agp.components.ListContainer;

import ohos.agp.window.dialog.ToastDialog;

import java.util.ArrayList;

import java.util.List;

public class TwoAbilitySlice extends AbilitySlice {

@Override

protected void onStart(Intent intent) {

super.onStart(intent);

setUIContent(ResourceTable.Layout_second_layout);

//根据findById从布局中获取ListContainer控件。

ListContainer listText = (ListContainer) findComponentById(ResourceTable.Id_listText);

//拿到ListProvider的对象

ListProvider listProvider=new ListProvider(this,getList());

//将ListProvider的对象设置给ListContainer控件。展示数据

listText.setItemProvider(listProvider);

listText.setItemClickedListener(new ListContainer.ItemClickedListener() {

@Override

public void onItemClicked(ListContainer listContainer, Component component, int i, long l) {

new ToastDialog(TwoAbilitySlice.this).setContentText(String.format("你点击了第%d行", i)).show();

}

});

}

/**

* 添加本地数据集合

*

* @return List 数据集合

*/

private List getList() {

List list = new ArrayList();

for (int i = 0; i

list.add(String.format("我是第%d行", i));

}

return list;

}

@Override

public void onActive() {

super.onActive();

}

@Override

public void onForeground(Intent intent) {

super.onForeground(intent);

}

}

我们在TV模拟器上来看看效果吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值