精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

組件開發ScrollView嵌套ListContainer滑動問題詳解

開發 前端
就ScrollView嵌套ListContainer的滑動問題,社區問答中也是遇見了兩次提問的小伙伴。準備把這個小問題寫成一篇帖子,希望后面再遇到“ScrollView嵌套ListContainer 滑動問題”的同學可以幫助到你們。

[[419191]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

ScrollView嵌套ListContainer

就ScrollView嵌套ListContainer的滑動問題,社區問答中也是遇見了兩次提問的小伙伴。在幫助第一個小伙解決這個問題的時候,我提供了一個思路和以前在寫Android ScrollView嵌套ListView滑動問題的解決方法。經過方法的修改也是解決了他的問題,后續沒有再把這個問題解決的全過程記錄下來,直到發現有第二個小伙伴也遇到了同樣的問題,準備把這個小問題寫成一篇帖子,希望后面再遇到“ScrollView嵌套ListContainer 滑動問題”的同學可以幫助到你們。

思路

一、ScrollView嵌套ListContainer 想讓ListContainer不滑動,只滑動ScrollView。在Android中有個東西叫做攔截器,ScrollView的攔截器,通過對攔截器的賦值達到只滑動ScrollView,不滑動ListView。

跳更一篇  組件開發 ScrollView嵌套ListContainer 滑動問題-鴻蒙HarmonyOS技術社區

調用方式

跳更一篇  組件開發 ScrollView嵌套ListContainer 滑動問題-鴻蒙HarmonyOS技術社區

因為ScrollView繼承自ViewGroup,在ViewGroup中有有dispatchTouchEvent()這個方法,

跳更一篇  組件開發 ScrollView嵌套ListContainer 滑動問題-鴻蒙HarmonyOS技術社區

但是在HarmonyOS中,ScrollView繼承自ComponentContainer,而且在ComponentContainer中沒有類似于dispatchTouchEvent的攔截器方法,那么攔截器不能搞就得換方法。

二、這時第二個思路也成型了,因為ScrollView的高度是根據它內部的組件的高度變化的,當內部的組件高度大于手機屏幕的高度時會出現ScrollView的滾動,反之不會出現。

那么就只能從ScrollView的高度入手了,要改變ScrollView的高度就必須去改變它內部組件的高度,那么問題來了ScrollView嵌套ListContainer,ListContainer的高度最大只能到屏幕大小或者是固定于屏幕內部,一旦高度達到所設置的高度,ListContainer就會出現自動滾動此時ScrollView的滾動也會失效,這里是焦點的關系滑動動作取到的焦點會在它當前組件上。

思路到這里也就清晰了,ListContainer的高度大于原始設置的高度時會發生滑動,ScrollView在內部組件高度大于手機屏幕時才會滑動。那么如果把ListContainer的高度設置成一個動態的固定值,ListContainer的數據永遠不會被填充滿,ListContainer就不會出現滑動。隨即ListContainer的高度如果大于了屏幕的高度ScrollView就會滑動。

OK,問題找到了,解決ListContainer的動態高度就解決的滑動沖突。

解決問題

首先我找到了當初寫Android時動態Listview高度的方法。這里就粘一下圖

跳更一篇  組件開發 ScrollView嵌套ListContainer 滑動問題-鴻蒙HarmonyOS技術社區

思路沒有變,將每次listview的Item高度相加作為listview的整體高度,listview的高度就是動態的變化,listview的高度會根據數據的增加而變化。

根據參考

下面開始寫代碼

首先整體布局文件,很簡單ScrollView嵌套ListContainer

為了效果明顯加入了一個圖片

  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.     <ScrollView 
  7.         ohos:id="$+id:view" 
  8.         ohos:height="match_parent" 
  9.         ohos:width="match_parent"
  10.         <!--設置DirectionalLayout的高度為match_parent--> 
  11.         <DirectionalLayout 
  12.             ohos:height="match_parent" 
  13.             ohos:width="match_parent" 
  14.             ohos:alignment="center" 
  15.             ohos:orientation="vertical"
  16.             <Image 
  17.                 ohos:id="$+id:img" 
  18.                 ohos:height="100vp" 
  19.                 ohos:width="100vp" 
  20.                 ohos:image_src="$media:icon"></Image> 
  21.             <ListContainer 
  22.                 ohos:id="$+id:list" 
  23.                 ohos:height="match_parent" 
  24.                 ohos:width="match_parent" 
  25.                 ></ListContainer> 
  26.         </DirectionalLayout> 
  27.     </ScrollView> 
  28. </DirectionalLayout> 

ListContainer的Item 布局,這里很簡單就放一個文本

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:height="match_content" 
  5.     ohos:width="match_parent" 
  6.     ohos:left_margin="16vp" 
  7.     ohos:right_margin="16vp" 
  8.     ohos:orientation="vertical"
  9.     <Text 
  10.         ohos:id="$+id:item_index" 
  11.         ohos:height="match_content" 
  12.         ohos:width="match_content" 
  13.         ohos:padding="4vp" 
  14.         ohos:text="Item0" 
  15.         ohos:text_size="20fp" 
  16.         ohos:layout_alignment="center"/> 
  17. </DirectionalLayout> 

 創建SampleItem.java,作為ListContainer的數據包裝類。

  1. public class SampleItem { 
  2.     private String name
  3.     public SampleItem(String name) { 
  4.         this.name = name
  5.     } 
  6.     public String getName() { 
  7.         return name
  8.     } 
  9.     public void setName(String name) { 
  10.         this.name = name
  11.     } 

 寫一個ListContainer的適配器用于放數據

  1. public class SampleItemProvider extends BaseItemProvider { 
  2.  
  3.     private List<SampleItem> list; 
  4.     private AbilitySlice slice; 
  5.  
  6.     public SampleItemProvider(List<SampleItem> list, AbilitySlice slice) { 
  7.         this.list = list; 
  8.         this.slice = slice; 
  9.     } 
  10.  
  11.     @Override 
  12.     public int getCount() { 
  13.         return list == null ? 0 : list.size(); 
  14.     } 
  15.  
  16.     @Override 
  17.     public Object getItem(int position) { 
  18.         if (list != null && position >= 0 && position < list.size()){ 
  19.             return list.get(position); 
  20.         } 
  21.         return null
  22.     } 
  23.  
  24.     @Override 
  25.     public long getItemId(int position) { 
  26.         return position; 
  27.     } 
  28.  
  29.     @Override 
  30.     public Component getComponent(int position, Component component, ComponentContainer componentContainer) { 
  31.         final Component cpt; 
  32.         if (component == null) { 
  33.             cpt = LayoutScatter.getInstance(slice).parse(ResourceTable.Layout_item_sample, nullfalse); 
  34.         } else { 
  35.             cpt = component; 
  36.         } 
  37.         SampleItem sampleItem = list.get(position); 
  38.         Text text = (Text) cpt.findComponentById(ResourceTable.Id_item_index); 
  39.         text.setText(sampleItem.getName()); 
  40.         return cpt; 
  41.     } 

在Java代碼中添加ListContainer的數據,并適配其數據結構。

還沒有加動態高度的方法。

  1. public class MainAbilitySlice extends AbilitySlice { 
  2.  
  3.     @Override 
  4.     public void onStart(Intent intent) { 
  5.         super.onStart(intent); 
  6.         super.setUIContent(ResourceTable.Layout_ability_main); 
  7.         initListContainer(); 
  8.     } 
  9.  
  10.     private void initListContainer() { 
  11.         ListContainer listContainer = (ListContainer) findComponentById(ResourceTable.Id_list); 
  12.         List<SampleItem> list = getData(); 
  13.         listContainer.setBoundarySwitch(true);  //添加分界線 
  14.         SampleItemProvider sampleItemProvider = new SampleItemProvider(list, this); 
  15.         listContainer.setItemProvider(sampleItemProvider); 
  16.     } 
  17.  
  18.     private ArrayList<SampleItem> getData() { 
  19.         ArrayList<SampleItem> list = new ArrayList<>(); 
  20.         for (int i = 0; i < 30; i++) { 
  21.             list.add(new SampleItem("Item" + i)); 
  22.         } 
  23.         return list; 
  24.     } 

查看效果

跳更一篇  組件開發 ScrollView嵌套ListContainer 滑動問題-鴻蒙HarmonyOS技術社區

編寫自定義高度方法:

  1. private void setListContainerHeight(ListContainer listContainer) { 
  2.         //獲取當前listContainer的適配器 
  3.         BaseItemProvider BaseItemProvider = listContainer.getItemProvider(); 
  4.        if (BaseItemProvider == null){ 
  5.            return
  6.        } 
  7.         int itemHeight = 0; 
  8.         for (int i = 0; i < BaseItemProvider.getCount(); i++) { 
  9.             //循環將listContainer適配器的Item數據進行累加 
  10.             Component listItem = BaseItemProvider.getComponent(i, null, listContainer); 
  11.             itemHeight += listItem.getHeight(); 
  12.         } 
  13.         //對當前listContainer進行高度賦值 
  14.         ComponentContainer.LayoutConfig config = listContainer.getLayoutConfig(); 
  15.         //這邊加上(listContainer.getBoundaryThickness() * (BaseItemProvider.getCount()+1)) 
  16.         //listContainer.getBoundaryThickness() 就是分界線的高度 
  17.         //(BaseItemProvider.getCount()+1) 是Item的數量  加1  是因為頂部還有一條分界線 
  18.         config.height = itemHeight 
  19.                 + (listContainer.getBoundaryThickness() * (BaseItemProvider.getCount()+1)); 
  20.         //賦值 
  21.         listContainer.setLayoutConfig(config); 
  22.     } 

調用方法:

跳更一篇  組件開發 ScrollView嵌套ListContainer 滑動問題-鴻蒙HarmonyOS技術社區

實現效果:

跳更一篇  組件開發 ScrollView嵌套ListContainer 滑動問題-鴻蒙HarmonyOS技術社區

出問題了,不能滑動!!!!!!!

找到了,問題在布局中。

跳更一篇  組件開發 ScrollView嵌套ListContainer 滑動問題-鴻蒙HarmonyOS技術社區

重新運行,查看結果:

跳更一篇  組件開發 ScrollView嵌套ListContainer 滑動問題-鴻蒙HarmonyOS技術社區

OK了,以達到了最終的效果。

代碼放在了下面的資源鏈接里,大家可以進行參考。

FirstDemo.zip

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-08-12 14:59:15

鴻蒙HarmonyOS應用

2011-09-08 15:51:33

Android Wid組件

2021-01-04 10:39:27

滑動問題滑動窗口Python

2013-05-17 13:47:25

Android開發ScrollViewGridView

2020-12-28 10:15:18

鴻蒙HarmonyOSListContain

2009-04-10 09:06:16

Windows Emb

2017-07-20 16:55:56

Android事件響應View源碼分析

2023-07-07 08:36:45

配置注解jar

2021-03-26 08:20:51

SpringBoot讀寫分離開發

2017-01-04 18:29:20

AndroidNestedScrol嵌套滑動機制

2021-10-18 10:14:26

鴻蒙HarmonyOS應用

2011-08-08 15:40:47

Cocos2d

2009-09-16 13:05:32

C#組件開發

2013-04-25 14:26:54

GridView

2021-12-20 20:51:44

鴻蒙HarmonyOS應用

2010-08-04 10:17:17

Android開發WebView組件

2024-07-01 08:23:20

2011-07-20 13:41:38

組策略

2010-12-31 10:37:09

2009-02-17 15:41:53

Ubuntu打印問題Virtualbox
點贊
收藏

51CTO技術棧公眾號

中国精品一区二区| v天堂中文在线| 伊人影院在线视频| 成人av在线播放网站| 欧美猛少妇色xxxxx| 中国av免费看| 99精品视频在线免费播放 | 国产一区二区三区色淫影院| 欧美啪啪小视频| 99久久久久| 日韩精品免费在线播放| 九九久久久久久| av今日在线| 国产精品久久一级| 狠狠色噜噜狠狠色综合久 | 2021天堂中文幕一二区在线观| 久久网这里都是精品| 亚洲在线观看视频| 成人小视频在线播放| 激情欧美日韩| 日韩日本欧美亚洲| 添女人荫蒂视频| 清纯唯美激情亚洲| 欧美三区在线观看| 啊啊啊一区二区| 青青青草视频在线| 欧美经典三级视频一区二区三区| 国产美女精品在线观看| 中文字幕精品一区二区精| 亚洲一区久久| 久久91亚洲精品中文字幕| 日日操免费视频| 亚洲三级网页| 亚洲第一区第一页| avtt中文字幕| 精品国产亚洲一区二区三区大结局| 在线亚洲一区观看| 日本免费一级视频| av资源网在线播放| 亚洲一区二区精品久久av| 国产对白在线播放| 日本精品一区二区三区在线播放| 国产免费久久精品| 日韩动漫在线观看| 国产高清av在线| 久久久久久97三级| 日本在线播放不卡| 国产中文字幕在线视频| 91麻豆成人久久精品二区三区| 国产欧美一区二区视频| 秋霞欧美在线观看| 99久久精品免费看| 国内一区二区三区在线视频| 手机看片福利在线| 99久久精品99国产精品| 久久精品国产99精品国产亚洲性色| 日韩在线视频观看免费| 9色porny自拍视频一区二区| 国产一区二区高清不卡| 午夜一区在线观看| 26uuu色噜噜精品一区二区| 久久精品国产理论片免费| 色就是色亚洲色图| 国产亚洲欧洲997久久综合| 日韩av电影在线观看| 国产小视频免费在线网址| 国产日韩欧美不卡| 在线精品日韩| 污视频网站在线免费| 亚洲一区免费观看| 国产成人精品视频免费看| 欧美大电影免费观看| 欧美日韩中文另类| 奇米777在线| 加勒比色老久久爱综合网| 国产视频综合在线| 国产三级aaa| 欧美性色综合| 日本精品va在线观看| 五月天中文字幕| 韩国欧美国产一区| 国产精品swag| 男人天堂资源在线| 亚洲人成伊人成综合网小说| 毛片av在线播放| 英国三级经典在线观看| 欧美日韩国产高清一区二区 | 99久久久久免费精品国产 | 欧洲精品一区二区| 亚洲黄色片免费| 欧美在线关看| 日韩中文字幕久久| 日韩欧美亚洲一区二区三区| 免费精品视频在线| 国产精品三区在线| 国产剧情在线观看| 亚洲永久精品国产| 男女污污的视频| 一区二区三区视频免费视频观看网站| 精品一区二区三区四区在线| 中文字幕在线2021| 久久精品官网| 国产91一区二区三区| 成人动漫在线免费观看| 亚洲a一区二区| 日本中文字幕二区| 欧美美乳视频| 欧美日本啪啪无遮挡网站| 波多野结衣二区三区| 成人一区二区三区中文字幕| 亚洲午夜激情| 成人影院大全| 亚洲国产精品视频在线观看| 国产喷水在线观看| 日韩精品电影在线观看| 国产欧美一区二区在线播放| 成人影欧美片| 欧美午夜片在线观看| free性中国hd国语露脸| 亚洲精品小说| 国产精品亚洲网站| 精品视频二区| 同产精品九九九| 巨乳女教师的诱惑| 国产精品99久久| 国产成人涩涩涩视频在线观看| 粉嫩小泬无遮挡久久久久久| 综合色中文字幕| 中文字幕av不卡在线| 自拍偷拍一区| 欧亚精品在线观看| 性xxxxbbbb| 天天色综合成人网| 91九色蝌蚪porny| 欧美性久久久| 波多野结衣一区二区三区在线观看 | 亚洲区小说区图片区qvod按摩 | 欧美精品v日韩精品v国产精品| 午夜av在线免费观看| 91精品国产综合久久久蜜臀粉嫩| 成人性视频免费看| 麻豆精品在线播放| 亚洲最大免费| 日韩成人精品一区二区三区| 在线播放日韩精品| 中文字幕二区三区| 亚洲欧洲成人精品av97| 老司机午夜性大片| 久久精品亚洲欧美日韩精品中文字幕| 国产精品吴梦梦| 国产黄色在线观看| 日韩一区二区三区免费观看| 亚洲av鲁丝一区二区三区| 国产精品一级在线| 亚洲熟妇无码av在线播放| 一区视频网站| 国产做受高潮69| 天天爱天天干天天操| 欧美日韩精品在线| www.狠狠爱| 久久99日本精品| 欧美 国产 精品| 国产精品久久久网站| 欧美中文字幕在线| 又爽又大又黄a级毛片在线视频| 欧美日韩黄视频| 成人在线观看小视频| 大陆成人av片| 日韩av资源在线| 日韩精品久久| 成人欧美一区二区| 亚洲美女尤物影院| 在线看福利67194| 国产男女无套免费网站| 亚洲国产视频在线| 欧洲女同同性吃奶| 精品影视av免费| 人体内射精一区二区三区 | 黄色免费高清视频| 91国内精品| 国产成人免费av电影| 黄色精品免费看| 亚洲国产日韩欧美在线99| 91久久国产综合久久91| 综合在线观看色| 久久久久国产精品区片区无码| 奇米亚洲午夜久久精品| 经典三级在线视频| 免费精品国产| 91在线视频免费| 成人一区福利| 欧美日韩xxxxx| 国产高清视频在线| 精品国产一区二区在线观看| 欧美日韩在线视频播放| 亚洲一区二区黄色| 疯狂撞击丝袜人妻| 91在线国内视频| 五月六月丁香婷婷| 久久精品女人天堂| 日韩精品在线观看av| 国产乱码精品一区二区三区四区| 91青草视频久久| 麻豆精品蜜桃| 亚洲3p在线观看| 成人短视频在线| 国产亚洲欧美日韩美女| 蜜桃久久一区二区三区| 在线观看91av| 超碰在线97观看| 欧美日韩黄色大片| 久久久久久蜜桃| 日韩理论片一区二区| 丰满少妇一区二区| 成人免费视频一区| 天天久久综合网| 免费xxxx性欧美18vr| 日韩av一二三四| 国产日韩专区| 九色自拍视频在线观看| 一区二区三区四区电影| 亚洲精品9999| 欧洲杯半决赛直播| 日本不卡二区| 美女av一区| 91手机在线播放| 精品国产亚洲一区二区三区大结局| 国产精品主播视频| 亚洲第一会所| 国产极品jizzhd欧美| 亚洲永久av| 欧美在线视频一区| 日韩电影毛片| 热草久综合在线| 中文字幕在线视频久| 国产91精品久久久久久久| 福利影院在线看| 97久久伊人激情网| 黄色漫画在线免费看| 国产做受69高潮| 无遮挡在线观看| 欧美在线性爱视频| 深夜视频一区二区| 国产精品久久久久久久一区探花| 日本欧美一区| 国产精品热视频| 六九午夜精品视频| 成人美女av在线直播| 91丨精品丨国产| 99高清视频有精品视频| 伊人精品久久| 精品乱色一区二区中文字幕| 亚洲第一福利社区| 日韩色妇久久av| 水蜜桃久久夜色精品一区| 可以免费看的黄色网址| 欧美日韩三级| 逼特逼视频在线| 日韩精品欧美精品| 欧洲美女亚洲激情| 成人少妇影院yyyy| 中文字幕在线看高清电影| 国产精品麻豆久久久| 国产精品国产三级国产传播| 亚洲一区二区三区精品在线| 99久在线精品99re8热| 在线一区二区视频| 国产日韩欧美视频在线观看| 日韩精品一区二区在线观看| 手机看片国产1024| 一区二区欧美日韩视频| 看黄网站在线| 韩国欧美亚洲国产| 韩国三级一区| 亚洲综合最新在线| 精品国产乱子伦一区二区| 欧美在线播放一区| 久久久久久久久丰满| 日韩av在线播放不卡| 日韩精品视频网| xxxx视频在线观看| 久久久99精品免费观看| 免费国产羞羞网站美图| 激情久久av一区av二区av三区 | 欧美xxxx老人做受| 奇米影视888狠狠狠777不卡| 少妇高潮久久久久久潘金莲| 蜜臀av在线| 国产精品专区一| 欧美日韩看看2015永久免费| 亚洲欧洲一区二区福利| 日韩视频中文| 日本美女视频一区| 91亚洲精品久久久蜜桃| 在线观看黄网址| 欧美日韩在线第一页| 国产精品系列视频| 亚洲色图美腿丝袜| 九色91在线| 成人国产精品一区二区| 蜜桃一区av| 97超碰免费观看| 日日欢夜夜爽一区| 精品影片一区二区入口| 自拍偷拍亚洲综合| 国产成人a v| 日韩av在线不卡| 中文字幕有码在线视频| 国产精品免费观看在线| 伦理一区二区三区| 国产毛片久久久久久国产毛片| 久久国产精品久久w女人spa| 18禁一区二区三区| 国产精品国产三级国产a| 91丝袜一区二区三区| 精品国产麻豆免费人成网站| 成人直播在线| 成人天堂噜噜噜| 日韩免费一区| 宅男噜噜噜66国产免费观看| 2023国产精品| 亚洲天堂日韩av| 精品乱人伦小说| 中文在线免费| 91性高湖久久久久久久久_久久99| 精品久久久亚洲| 青青青国产在线视频| 91免费版在线看| 国产精品999在线观看| 精品精品欲导航| 日本三级在线观看网站| 亚洲伊人成综合成人网| 婷婷综合亚洲| 天天干天天色天天干| 国产精品毛片大码女人| 亚洲高清视频免费观看| 亚洲图片在线综合| 成人黄色免费短视频| 欧美日韩亚洲在线| 久久久久久久波多野高潮日日| 欲求不满的岳中文字幕| 精品国产91久久久| 亚州男人的天堂| 欧美孕妇毛茸茸xxxx| 杨幂一区二区三区免费看视频| 亚洲爆乳无码专区| 欧美国产日产图区| 91精品人妻一区二区三区果冻| 色噜噜狠狠狠综合曰曰曰 | 久久午夜精品一区二区| 深爱五月激情网| 色成人在线视频| 午夜视频在线观看免费视频| 国产日韩欧美在线观看| 综合五月婷婷| 免费看毛片的网站| 日韩欧美有码在线| 二人午夜免费观看在线视频| 国产精品一区二区女厕厕| 国产精品久久久乱弄| 久久aaaa片一区二区| 午夜视频久久久久久| 日本亚洲欧美| 国产精品人人做人人爽| 亚洲美女视频| 久久福利小视频| 欧美在线综合视频| 国产1区在线| 国产一区二区不卡视频| 日本成人在线一区| 日本aⅴ在线观看| 亚洲大胆人体视频| 视频在线日韩| 免费观看国产视频在线| av中文字幕在线不卡| 国产在线观看第一页| 欧美xxxx做受欧美.88| 任我爽精品视频在线播放| 欧美婷婷精品激情| 亚洲最大色网站| 国产永久av在线| 99re视频在线| 久久一区欧美| 唐朝av高清盛宴| 亚洲欧美在线一区二区| 国产欧美视频在线| 日本免费黄视频| 夜夜精品视频一区二区| 欧美老女人性开放| 超碰97人人人人人蜜桃| 视频一区免费在线观看| 麻豆changesxxx国产| 永久555www成人免费| 黑色丝袜福利片av久久| 黄色永久免费网站| 精品magnet| 在线电影福利片| 日韩精品国内| av电影在线观看一区| 99re只有精品|