自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

鴻蒙 TabList 配合Fraction 實(shí)現(xiàn)頂部切換效果

開(kāi)發(fā) 前端
今天我想著配合鴻蒙里面提供的頂部切換控件 tablist 來(lái)實(shí)現(xiàn)頂部tab 切換然后下面多個(gè)fraction的效果。那么廢話不多說(shuō)我們正式開(kāi)始。

[[438851]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

前言:

各位同學(xué)大家好,有段時(shí)間沒(méi)有給大家更新文章,具體多久我也不清楚哈,昨天發(fā)了一篇關(guān)于 Fraction。的基礎(chǔ)用法和生命周期的,今天我想著配合鴻蒙里面提供的頂部切換控件 tablist 來(lái)實(shí)現(xiàn)頂部tab 切換然后下面多個(gè)fraction的效果。那么廢話不多說(shuō)我們正式開(kāi)始。

效果圖:

#星光計(jì)劃2.0# 鴻蒙 TabList 配合Fraction 實(shí)現(xiàn)頂部切換效果-鴻蒙HarmonyOS技術(shù)社區(qū)
#星光計(jì)劃2.0# 鴻蒙 TabList 配合Fraction 實(shí)現(xiàn)頂部切換效果-鴻蒙HarmonyOS技術(shù)社區(qū)
#星光計(jì)劃2.0# 鴻蒙 TabList 配合Fraction 實(shí)現(xiàn)頂部切換效果-鴻蒙HarmonyOS技術(shù)社區(qū)

具體實(shí)現(xiàn):

定tablist布局

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:height="match_parent" 
  5.     ohos:width="match_parent" 
  6.     ohos:orientation="vertical"
  7.  
  8.     <TabList 
  9.         ohos:id="$+id:tab_list" 
  10.         ohos:top_margin="10vp" 
  11.         ohos:tab_margin="12vp" 
  12.         ohos:tab_length="60vp" 
  13.         ohos:text_size="15fp" 
  14.         ohos:height="36vp" 
  15.         ohos:width="match_parent" 
  16.         ohos:layout_alignment="center" 
  17.         ohos:orientation="horizontal" 
  18.         ohos:text_alignment="center" 
  19.         ohos:normal_text_color="#999999" 
  20.         ohos:selected_text_color="#FF0000" 
  21.         ohos:selected_tab_indicator_color="#FF0000" 
  22.         ohos:selected_tab_indicator_height="2vp" 
  23.         /> 
  24.  
  25.     <StackLayout 
  26.         ohos:id="$+id:mainstack" 
  27.         ohos:height="match_parent" 
  28.         ohos:width="match_parent" 
  29.         > 
  30.     </StackLayout> 
  31. </DirectionalLayout> 

我們?cè)诳v向線性布局上面寫(xiě)了一個(gè)tablist 然后下面寫(xiě)了一個(gè) StackLayout 來(lái)裝載我們的多個(gè)fraction

  • java 代碼邏輯

頂部標(biāo)簽數(shù)據(jù)

  1. private  String[] str={"關(guān)注","推薦","熱點(diǎn)","問(wèn)答"}; 

 初始化tab并且添加頂部標(biāo)簽文字

  1. private void initview() { 
  2.        TabList tabList = (TabList) findComponentById(ResourceTable.Id_tab_list); 
  3.        if(tabList!=null){ 
  4.            for (int i = 0; i < str.length; i++) { 
  5.                TabList.Tab tab = tabList.new Tab(getContext()); 
  6.                tab.setText(str[i]); 
  7.                tabList.addTab(tab); 
  8.            } 
  9.           /* tabList.setTabLength(60); // 設(shè)置Tab的寬度 
  10.            tabList.setTabMargin(26); // 設(shè)置兩個(gè)Tab之間的間距*/ 
  11.            addHomeFraction(); 
  12.            tabList.addTabSelectedListener(new TabList.TabSelectedListener() { 
  13.                @Override 
  14.                public void onSelected(TabList.Tab tab) { 
  15.                    // 當(dāng)某個(gè)Tab從未選中狀態(tài)變?yōu)檫x中狀態(tài)時(shí)的回調(diào) 
  16.                    System.out.println("當(dāng)某個(gè)Tab從未選中狀態(tài)變?yōu)檫x中狀態(tài)時(shí)的回調(diào)"); 
  17.                    layoutShow(tab.getPosition()); 
  18.                } 
  19.  
  20.                @Override 
  21.                public void onUnselected(TabList.Tab tab) { 
  22.                    // 當(dāng)某個(gè)Tab從選中狀態(tài)變?yōu)槲催x中狀態(tài)時(shí)的回調(diào) 
  23.                    System.out.println("當(dāng)某個(gè)Tab從選中狀態(tài)變?yōu)槲催x中狀態(tài)時(shí)的回調(diào)"); 
  24.                } 
  25.                @Override 
  26.                public void onReselected(TabList.Tab tab) { 
  27.                    // 當(dāng)某個(gè)Tab已處于選中狀態(tài),再次被點(diǎn)擊時(shí)的狀態(tài)回調(diào) 
  28.                    System.out.println("當(dāng)某個(gè)Tab已處于選中狀態(tài),再次被點(diǎn)擊時(shí)的狀態(tài)回調(diào)"); 
  29.                } 
  30.            }); 
  31.  
  32.        } 
  33.    } 

我們初始化我們的tablist 控件后 我們for循環(huán)設(shè)置我們的tablist的tab 并添加到tablist組件的addTab方法中

多個(gè)fraction 切換邏輯

  1. private void  addHomeFraction(){ 
  2.       getFractionManager() 
  3.               .startFractionScheduler() 
  4.               .add(ResourceTable.Id_mainstack, new AttentionFraction()) 
  5.               .submit(); 
  6.   } 
  7.  
  8.  
  9.   public  void  layoutShow(int  code){ 
  10.       switch (code){ 
  11.           case 0: 
  12.               getFractionManager() 
  13.                       .startFractionScheduler() 
  14.                       .replace(ResourceTable.Id_mainstack, new AttentionFraction()) 
  15.                       .submit(); 
  16.  
  17.               break; 
  18.           case 1: 
  19.               getFractionManager() 
  20.                       .startFractionScheduler() 
  21.                       .replace(ResourceTable.Id_mainstack, new RecommendFraction()) 
  22.                       .submit(); 
  23.  
  24.  
  25.               break; 
  26.           case 2: 
  27.               getFractionManager() 
  28.                       .startFractionScheduler() 
  29.                       .replace(ResourceTable.Id_mainstack, new HotspotFraction()) 
  30.                       .submit(); 
  31.  
  32.               break; 
  33.           case 3: 
  34.               getFractionManager() 
  35.                       .startFractionScheduler() 
  36.                       .replace(ResourceTable.Id_mainstack, new QuestionFraction()) 
  37.                       .submit(); 
  38.  
  39.               break; 
  40.           default
  41.               break; 
  42.       } 
  43.   } 

這邊我們提供了一個(gè)addHomeFraction 方法和layoutShow 方法 我們?cè)谶M(jìn)入 MainAbility 的時(shí)候我們調(diào)用 addHomeFraction 來(lái)加載第一個(gè)默認(rèn)的fraction 然后我們?cè)邳c(diǎn)擊頂部的tablist標(biāo)簽的時(shí)候 我們?cè)?onSelected 回調(diào)方法中調(diào)用 layoutShow方法

  1. public void onSelected(TabList.Tab tab) { 
  2.                    // 當(dāng)某個(gè)Tab從未選中狀態(tài)變?yōu)檫x中狀態(tài)時(shí)的回調(diào) 
  3.                    System.out.println("當(dāng)某個(gè)Tab從未選中狀態(tài)變?yōu)檫x中狀態(tài)時(shí)的回調(diào)"); 
  4.                    layoutShow(tab.getPosition()); 
  5.                } 

 我們只需要傳入tab.getPosition() 點(diǎn)擊頂部標(biāo)簽的下標(biāo)即可

這樣依賴(lài)我們的tablist配合多個(gè)fraction切換功能就實(shí)現(xiàn)了

##具體的fraction的內(nèi)部邏輯我們簡(jiǎn)單說(shuō)一下

  • 關(guān)注模塊

布局文件

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3. xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4. ohos:height="match_parent" 
  5. ohos:orientation="vertical" 
  6. ohos:width="match_parent"
  7.  
  8.     <ListContainer 
  9.         ohos:id="$+id:jop_page_list" 
  10.         ohos:height="match_parent" 
  11.         ohos:width="match_parent"
  12.     </ListContainer> 
  13. </DirectionalLayout> 

java邏輯代碼

  1. package com.example.tablist.fraction; 
  2. import com.example.tablist.ResourceTable; 
  3. import com.example.tablist.bean.PositionInfo; 
  4. import com.example.tablist.config.Api; 
  5. import com.example.tablist.provider.PositionProvider; 
  6. import com.google.gson.Gson; 
  7. import ohos.aafwk.ability.fraction.Fraction; 
  8. import ohos.aafwk.content.Intent; 
  9. import ohos.agp.components.Component; 
  10. import ohos.agp.components.ComponentContainer; 
  11. import ohos.agp.components.LayoutScatter; 
  12. import ohos.agp.components.ListContainer; 
  13. import java.util.List; 
  14. /*** 
  15.  * 
  16.  * 創(chuàng)建人:xuqing 
  17.  * 創(chuàng)建2021年2月28日17:24:03 
  18.  * 類(lèi)說(shuō)明: 關(guān)注模塊 
  19.  * 
  20.  */ 
  21. public class AttentionFraction extends Fraction { 
  22.     private PositionProvider positionProvider; 
  23.     private ListContainer listContainer; 
  24.     @Override 
  25.     protected Component onComponentAttached(LayoutScatter scatter, ComponentContainer container,  
  26.                   Intent intent) { 
  27.         Component component=scatter.parse(ResourceTable.Layout_fraction_attention,container,false); 
  28.         return component; 
  29.     } 
  30.     protected void onStart(Intent intent) { 
  31.         super.onStart(intent); 
  32.         listContainer= (ListContainer)  
  33.         getFractionAbility().findComponentById(ResourceTable.Id_jop_page_list); 
  34.         getPostition(); 
  35.     } 
  36.     public  void  getPostition(){ 
  37.         Gson gson=new Gson(); 
  38.         PositionInfo positionInfo=gson.fromJson(Api.getPositioninfo(),PositionInfo.class); 
  39.         List<PositionInfo.DataBean> list=positionInfo.getData(); 
  40.         positionProvider=new PositionProvider(list,  getFractionAbility()); 
  41.         listContainer.setItemProvider(positionProvider); 
  42.     } 

幾個(gè)fraction其實(shí)比較·簡(jiǎn)單都是加載本地死數(shù)據(jù)顯示在listContainer 控件上面,其他幾個(gè)fraction因?yàn)檫壿嫸疾畈欢辔疫@邊就不展開(kāi)一個(gè)一個(gè)講 有興趣的同學(xué)可以下載完整代碼去查閱 ,鴻蒙到此TabList 配合Fraction 實(shí)現(xiàn)頂部切換效果就講完了

最后總結(jié) :

鴻蒙里面提供了比較好用的tablist組件。我們只需要簡(jiǎn)單的基本就能實(shí)現(xiàn)頂部tab的切換了。然后我們配合fraction跟我們的 Ability 進(jìn)行綁定但是我們的 Ability 需要繼承 FractionAbility 。這樣我們就能完成fraction和ability 的綁定。我們?cè)? tablist的回調(diào)方法去調(diào)用我們替換fraction的方法 就能實(shí)現(xiàn)頂部tablist點(diǎn)擊切換的時(shí)候下面的fraction跟著一起切換 整個(gè)代碼邏輯還算比較簡(jiǎn)單跟上一篇底部切換有異曲同工之妙。 更多的tablist和fraction的聯(lián)動(dòng)效果同學(xué)們有興趣可以私下研究 我這邊篇幅有限就不展開(kāi)講了。最后希望我的文章能幫助到各位解決問(wèn)題 ,以后我還會(huì)貢獻(xiàn)更多有用的代碼分享給大家。

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2018-04-16 14:39:10

Vue輪播切換

2021-09-16 10:05:09

鴻蒙HarmonyOS應(yīng)用

2011-05-31 09:23:58

Android Activity

2024-03-15 09:27:35

函數(shù)數(shù)據(jù)懶加載FlowItem組件

2021-11-03 17:10:37

CSS sticky前端代碼

2022-03-29 11:28:24

HarmonyOS動(dòng)畫(huà)css

2021-11-09 08:30:48

CSS 技巧巧用濾鏡

2015-04-13 09:44:14

Nginxkeepalived負(fù)載均衡

2022-09-21 14:51:21

ArkUI信件彈出

2022-06-21 11:23:15

API鴻蒙JS開(kāi)發(fā)

2013-03-28 10:58:30

自定義Android界android

2022-12-12 11:11:05

2021-06-09 11:28:06

加密數(shù)據(jù)Jsencrypt

2011-07-08 10:15:15

IPhone 動(dòng)畫(huà)

2012-05-09 14:49:23

HTML5

2012-06-14 15:49:59

Slider

2017-02-06 13:00:49

Android翻轉(zhuǎn)卡片動(dòng)畫(huà)效果

2024-01-25 10:37:33

MySQL數(shù)據(jù)庫(kù)ES

2023-03-23 09:09:32

前端詞云效果

2025-04-01 00:06:50

JavaK8sSpring
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)