实现以下功能
由ListContain组件 实现古诗词列表,点击列表里的一个,展开为详细信息
实现由以下几个组成 Model ,Provider,Ability,AbilitySlice
ListContainer-常用组件开发指导-Java UI框架-UI-基于Java开发-开发-HarmonyOS应用开发
page_listcontainer为listcontain的主布局
实现各种效果在于子布局item_poem
其中两个包装类 分别用于一个Poem给item_poem包装 Tex给item_poem_xzbj包装
MainAbilitySlice 在于 在Java代码中添加ListContainer的数据,并适配其数据结构
public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_page_listcontainer); initListContainer(); } private void initListContainer() { listContainer= (ListContainer) findComponentById(ResourceTable.Id_list_container); List<Poem> list = getData(); PoemItemProvider sampleItemProvider = new PoemItemProvider(list, this); listContainer.setItemProvider(sampleItemProvider); listContainer.setItemClickedListener(new ListContainer.ItemClickedListener() { @Override public void onItemClicked(ListContainer listContainer, Component component, int i, long l) { Intent intent1=new Intent(); intent1.setParam("itemid",i); present(new PoemPageXZBJSlice(),intent1); } }); } private ArrayList<Poem> getData() { ArrayList<Poem> list = new ArrayList<>(); for (int i = 0; i < imgid.length; i++) { if (i%2==0){ list.add(new Poem(imgid[i],biaoti[i],name[i],"("+caidai[i]+")",valuse[i],true)); }else { list.add(new Poem(imgid[i],biaoti[i],name[i],"("+caidai[i]+")",valuse[i],false)); } } return list; } }
PoemPageXZBJSilce 跟同上面 实现后台数据的逻辑
@Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_item_poem_xzbj); initCompeter(); id=intent.getIntParam("itemid",0); initpage(); initListContainer(); } private void initListContainer() { // ListContainer listContainer = (ListContainer) findComponentById(ResourceTable.Id_list_container); List<Tex> list = getData(); PoemValue sampleItemProvider = new PoemValue(list, this); valu1.setItemProvider(sampleItemProvider); } private List<Tex> getData() { ArrayList<Tex> list = new ArrayList<>(); String str[]=valuse[id].split("-"); for (int i = 0; i < str.length; i++) { list.add(new Tex(str[i])); } return list; } private void initpage(){ biaoti.setText(biaoti1[id]); try { PixelMapElement element=new PixelMapElement(getResourceManager().getResource(imgid1[id])); dlt.setBackground(element); }catch (Exception e){ e.getMessage(); } caidai.setText(caidai1[id]); name.setText(name1[id]); // valuse[id].split("。"); // valu1.setText(valuse[id].split("。")[0]); } private void initCompeter() { dlt= (DirectionalLayout) findComponentById(ResourceTable.Id_dlt); biaoti= (Text) findComponentById(ResourceTable.Id_biaotis); caidai=(Text) findComponentById(ResourceTable.Id_caidai); name= (Text) findComponentById(ResourceTable.Id_name1); valu1= (ListContainer) findComponentById(ResourceTable.Id_valu1); }
而两个provider 所做最主要的功能在于,将其适配后加载组件,实现组件中显示的逻辑等等
public Component getComponent(int position, Component convertComponent, ComponentContainer componentContainer) { final Component cpt; if (convertComponent == null) { cpt = LayoutScatter.getInstance(slice).parse(ResourceTable.Layout_textitem, null, false); } else { cpt = convertComponent; } Tex sampleItem = list.get(position); Text text = (Text) cpt.findComponentById(ResourceTable.Id_item_index); text.setText(sampleItem.getName()); return cpt; }
项目微云连接:文件分享