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

2020征文-手機圖解鴻蒙列表組件ListContainer

系統
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zz

[[360076]]

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

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

https://harmonyos.51cto.com/#zz

一、什么是ListContainer

ListContainer是用來呈現連續、多行數據的列表組件,包含一系列相同類型的列表項。如下圖所示:


二、ListContainer的架構視圖

ListContainer的架構視圖如下所示:

ListContainer作為列表,其中的列表項數據是由適配器Adapter提供的,適配器Adapter作為ListContainer和數據源之間的中介&橋梁,將數據源中的數據映射到要展示的ListContainer中,ListContainer負責以列表的形式顯示適配器Adapter提供的數據。

三、ListContainer的使用步驟

ListContainer的使用步驟主要包括:

1、創建ListContainer

2、創建列表項的布局

3、使用POJO類封裝數據源中與每個列表項對應的數據

4、構造數據源

5、構造適配器Adapter

6、將數據源關聯到適配器Adapter

7、將適配器Adapter應用到ListContainer

四、ListContainer的使用示例

示例的運行效果如下圖所示:

開發步驟如下:

1、創建ListContainer(ability_main.xml)

  1. xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  2.  
  3. ohos:id="$+id:list_container" 
  4.  
  5. ohos:height="match_parent" 
  6.  
  7. ohos:width="match_parent"/> 

 2、創建列表項的布局(item.xml)

  1. xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  2.  
  3. ohos:height="match_content" 
  4.  
  5. ohos:width="match_parent" 
  6.  
  7. ohos:orientation="vertical"
  8.  
  9.  
  10. ohos:id="$+id:name" 
  11.  
  12. ohos:height="50vp" 
  13.  
  14. ohos:width="match_parent" 
  15.  
  16. ohos:padding="5vp" 
  17.  
  18. ohos:auto_font_size="true" 
  19.  
  20. ohos:text_alignment="center"/> 
  21.  
  22.  
  23. ohos:height="1vp" 
  24.  
  25. ohos:width="match_parent" 
  26.  
  27. ohos:background_element="#CCCCCC"/> 

 3、使用POJO類封裝數據源中與每個列表項對應的數據(Item.java)

POJO類指的是:只包含屬性和相應的getter和setter,而沒有業務邏輯的類。

  1. public class Item { 
  2.  
  3. private String name
  4.  
  5. public Item(String name) { 
  6.  
  7. this.name = name
  8.  
  9.  
  10. public String getName() { 
  11.  
  12. return name
  13.  
  14.  
  15. public void setName(String name) { 
  16.  
  17. this.name = name
  18.  
  19.  

 4、構造數據源(MainAbilitySlice.java) 

  1. public class MainAbilitySlice extends AbilitySlice { 
  2.  
  3. @Override 
  4.  
  5. public void onStart(Intent intent) { 
  6.  
  7. super.onStart(intent); 
  8.  
  9. super.setUIContent(ResourceTable.Layout_ability_main); 
  10.  
  11. List list = getData(); 
  12.  
  13.  
  14. private List getData() { 
  15.  
  16. List list = new ArrayList<>(); 
  17.  
  18. for (int i = 1; i <= 100; i++) { 
  19.  
  20. list.add(new Item("Item " + i)); 
  21.  
  22.  
  23. return list; 
  24.  
  25.  

 5、構造適配器Adapter(MyItemProvider.java)

常用的適配器類是RecycleItemProvider,繼承該類時需要重寫四個方法:getCount()、getItem()、getItemId()和getComponent()。其中,對于方法getComponent(),當某個列表項從不可見變為可見時會自動調用該方法,在該方法中適配器Adapter會從數據源取數據,并將返回的數據封裝在一個Component對象中,以便將該對象返回給ListContainer,從而將數據映射到對應的列表項。

  1. public class MyItemProvider extends RecycleItemProvider { 
  2.  
  3. private List list; 
  4.  
  5. private AbilitySlice slice; 
  6.  
  7. public MyItemProvider(List list, AbilitySlice slice) { 
  8.  
  9. this.list = list; 
  10.  
  11. this.slice = slice; 
  12.  
  13.  
  14. @Override 
  15.  
  16. public int getCount() { 
  17.  
  18. return list.size(); 
  19.  
  20.  
  21. @Override 
  22.  
  23. public Object getItem(int position) { 
  24.  
  25. return list.get(position); 
  26.  
  27.  
  28. @Override 
  29.  
  30. public long getItemId(int position) { 
  31.  
  32. return position; 
  33.  
  34.  
  35. @Override 
  36.  
  37. public Component getComponent(int position, Component convertComponent, ComponentContainer componentContainer) { 
  38.  
  39. convertComponent = LayoutScatter.getInstance(slice) 
  40.  
  41. .parse(ResourceTable.Layout_item, nullfalse); 
  42.  
  43. Text text = (Text) convertComponent.findComponentById(ResourceTable.Id_name); 
  44.  
  45. text.setText(list.get(position).getName()); 
  46.  
  47. return convertComponent; 
  48.  
  49.  

 6、將數據源關聯到適配器Adapter(MainAbilitySlice.java) 

  1. public class MainAbilitySlice extends AbilitySlice { 
  2.  
  3. @Override 
  4.  
  5. public void onStart(Intent intent) { 
  6.  
  7. ...... 
  8.  
  9. List list = getData(); 
  10.  
  11. MyItemProvider myItemProvider = new MyItemProvider(list, this); 
  12.  
  13.  
  14. ...... 
  15.  

 7、將適配器Adapter應用到ListContainer(MainAbilitySlice.java) 

  1. public class MainAbilitySlice extends AbilitySlice { 
  2.  
  3. @Override 
  4.  
  5. public void onStart(Intent intent) { 
  6.  
  7. ...... 
  8.  
  9. MyItemProvider myItemProvider = new MyItemProvider(list, this); 
  10.  
  11. ListContainer listContainer = (ListContainer) findComponentById(ResourceTable.Id_list_container); 
  12.  
  13. listContainer.setItemProvider(myItemProvider); 
  14.  
  15.  
  16. ...... 
  17.  

 五、適配器Adapter的優化

對于上面的第5步,當某個列表項從不可見變為可見時,對于自動調用的方法getComponent(),我們是根據列表項的布局文件item.xml創建了一個列表項的實例。這樣的做法性能較差。因為系統會對變為不可見的列表項實例進行緩存,所以對于方法getComponent()中的第二個參數convertComponent有可能不為null。當convertComponent不為null時,說明系統把緩存中的某個列表項實例傳遞過來了,因此,完全可以復用該列表項實例,而沒有必要重新創建一個列表項實例。優化方式如下:

  1. public class MyItemProvider extends RecycleItemProvider { 
  2.  
  3. ...... 
  4.  
  5. @Override 
  6.  
  7. public Component getComponent(int position, Component convertComponent, ComponentContainer componentContainer) { 
  8.  
  9. if (convertComponent == null) { 
  10.  
  11. convertComponent = LayoutScatter.getInstance(slice) 
  12.  
  13. .parse(ResourceTable.Layout_item, nullfalse); 
  14.  
  15.  
  16. Text text = (Text) convertComponent.findComponentById(ResourceTable.Id_name); 
  17.  
  18. text.setText(list.get(position).getName()); 
  19.  
  20. return convertComponent; 
  21.  
  22.  

 六、使用ViewHolder對適配器Adapter做終極優化

在上面的代碼中,得到列表項實例后(不管是新創建的列表項實例,還是從緩存中獲得的列表項實例),都要調用方法findComponentById()以獲得列表項中的子組件。調用方法findComponentById()是比較耗費性能的,所以好的做法是:在新創建列表項實例時,就調用方法findComponentById()以獲得列表項中的所有子組件,并且將所有子組件通過ViewHolder綁定到列表項實例。這樣,當從緩存中獲得列表項實例后,就無需再調用方法findComponentById()了,直接獲得列表項實例綁定的ViewHolder就可以得到所有子組件了。優化方式如下:

  1. public class MyItemProvider extends RecycleItemProvider { 
  2.  
  3. ...... 
  4.  
  5. @Override 
  6.  
  7. public Component getComponent(int position, Component convertComponent, ComponentContainer componentContainer) { 
  8.  
  9. ViewHolder viewHolder; 
  10.  
  11. if (convertComponent == null) { 
  12.  
  13. convertComponent = LayoutScatter.getInstance(slice) 
  14.  
  15. .parse(ResourceTable.Layout_item, nullfalse); 
  16.  
  17. viewHolder = new ViewHolder(); 
  18.  
  19. viewHolder.text = (Text) convertComponent.findComponentById(ResourceTable.Id_name); 
  20.  
  21. convertComponent.setTag(viewHolder); 
  22.  
  23. else { 
  24.  
  25. viewHolder = (ViewHolder) convertComponent.getTag(); 
  26.  
  27.  
  28. viewHolder.text.setText(list.get(position).getName()); 
  29.  
  30. return convertComponent; 
  31.  
  32.  
  33. class ViewHolder { 
  34.  
  35. Text text; 
  36.  
  37.  

 如果你理解了為什么要這么優化,相信你會發現:當列表項中只有一個子組件時,也可以不引入ViewHolder,而是將這個子組件直接綁定到列表項實例。代碼如下所示:

  1. public class MyItemProvider extends RecycleItemProvider { 
  2.  
  3. ...... 
  4.  
  5. @Override 
  6.  
  7. public Component getComponent(int position, Component convertComponent, ComponentContainer componentContainer) { 
  8.  
  9. Text text; 
  10.  
  11. if (convertComponent == null) { 
  12.  
  13. convertComponent = LayoutScatter.getInstance(slice) 
  14.  
  15. .parse(ResourceTable.Layout_item, nullfalse); 
  16.  
  17. text = (Text) convertComponent.findComponentById(ResourceTable.Id_name); 
  18.  
  19. convertComponent.setTag(text); 
  20.  
  21. else { 
  22.  
  23. text = (Text) convertComponent.getTag(); 
  24.  
  25.  
  26. text.setText(list.get(position).getName()); 
  27.  
  28. return convertComponent; 
  29.  
  30.  

 示例源代碼,請見附件。

歡迎訂閱我的專欄【圖解鴻蒙】:

https://harmonyos.51cto.com/column/27

©著作權歸作者和HarmonyOS技術社區共同所有,如需轉載,請注明出處,否則將追究法律責任

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

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

https://harmonyos.51cto.com/#zz

 

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

2021-08-12 14:59:15

鴻蒙HarmonyOS應用

2020-12-22 11:09:20

鴻蒙Feature AbiAbilitySlic

2020-12-28 11:19:06

鴻蒙HarmonyOSPage Abilit

2020-12-04 12:42:59

組件鴻蒙Text

2020-12-23 11:36:23

鴻蒙HarmonyOS應用程序開發

2020-12-22 09:48:18

鴻蒙HarmonyOS應用程序

2020-12-23 11:24:34

鴻蒙開發IDE安裝

2020-12-22 11:20:36

鴻蒙HarmonyOS游戲

2020-12-23 11:45:27

鴻蒙HarmonyOSTextField組件

2020-12-28 11:30:07

鴻蒙HarmonyOS分布式

2020-12-09 11:53:24

鴻蒙開發HelloWord

2020-12-25 10:39:53

鴻蒙開發JS

2020-12-24 10:05:54

鴻蒙鴻蒙開發Hello World

2020-12-24 11:24:31

鴻蒙開發JS

2021-08-25 09:49:48

鴻蒙HarmonyOS應用

2020-12-29 09:59:01

鴻蒙HarmonyOS智能家居

2022-04-24 15:17:56

鴻蒙操作系統

2020-12-14 09:58:28

鴻蒙HarmonyOS手表游戲

2020-12-11 12:27:35

鴻蒙HarmonyOS

2020-12-18 11:05:25

鴻蒙HarmonyOS游戲
點贊
收藏

51CTO技術棧公眾號

亚洲精品国精品久久99热一| 国产高清久久久久| 亚洲欧洲美洲在线综合| 男人的天堂最新网址| 精品自拍一区| 99精品视频在线免费观看| 国产成人精品av在线| 欧美爱爱免费视频| 网曝91综合精品门事件在线| 国产精品999在线观看| 99久久夜色精品国产亚洲狼| 亚洲成人黄色网址| wwwwwxxxx日本| freexxx性亚洲精品| 亚洲国产高清在线| 精品产品国产在线不卡| 在线观看黄色国产| 一区二区国产精品| 久久久91精品国产一区不卡| www.超碰97| www久久久| 在线一区二区三区四区| 天堂8在线天堂资源bt| av中文字幕在线| 91在线精品一区二区| 91免费精品国偷自产在线| 日本中文字幕在线观看视频| 在线 亚洲欧美在线综合一区| 中文字幕久久精品| 好吊一区二区三区视频| 色播一区二区| 欧美精品xxxxbbbb| 日韩视频在线免费看| 99爱在线视频| 亚洲国产一区二区三区青草影视| 一区高清视频| yourporn在线观看视频| wwwwww.欧美系列| 国产麻豆乱码精品一区二区三区 | 欧美三级电影网站| 欧美日韩在线不卡视频| 2021天堂中文幕一二区在线观| 亚洲码国产岛国毛片在线| 亚洲午夜久久久影院伊人| 亚洲欧美丝袜中文综合| 白白色亚洲国产精品| ts人妖另类在线| 精品人妻一区二区三区蜜桃| 国产在线一区二区综合免费视频| 国产精品亚洲欧美导航| 欧美成人一区二区视频| 免费在线观看成人| 国产精品永久免费| 中文字幕永久免费视频| 免费成人美女在线观看| 国产精品免费一区二区三区都可以| 国语对白永久免费| 亚洲专区一区| 热99精品只有里视频精品| √资源天堂中文在线| 蘑菇福利视频一区播放| 国产成人精品久久久| 精品久久久久久久久久久国产字幕 | 午夜视频久久久久久| 日韩国产小视频| 欧美videosex性极品hd| 亚洲国产综合色| 精品久久久久久久久久中文字幕| 日韩脚交footjobhdboots| 欧美日韩黄色大片| 黄色片一级视频| www.一区| 日韩欧美的一区| 国产精品无码一区二区三| 欧美黑人做爰爽爽爽| 亚洲区免费影片| 五月婷婷欧美激情| 在线精品国产| 91国产精品91| 中文字幕视频二区| 一级片视频在线观看| 欧洲视频一区| 久久99精品国产99久久6尤物| 国产亚洲精品女人久久久久久| 在线亚洲欧美| 国产欧美一区二区三区在线看| a级片在线播放| 粉嫩av亚洲一区二区图片| 久久久久久亚洲精品不卡4k岛国| 在线a免费看| 亚洲午夜久久久久久久久电影网 | www.在线欧美| 神马影院我不卡午夜| 超碰在线最新| 一本色道综合亚洲| 欧美又黄又嫩大片a级| 国产区精品视频在线观看豆花| 亚洲欧美视频在线| 国产av 一区二区三区| 国产精品久久久久久模特| 国产精品视频专区| 深夜福利视频网站| 国产精品大尺度| 5月婷婷6月丁香| 婷婷成人av| 国产视频精品xxxx| 精品国产乱码久久久久久鸭王1| 久久国产欧美| 国产精品三区四区| 国产在线观看a| 在线欧美日韩精品| 亚洲天堂av网站| 亚洲91中文字幕无线码三区| 日本精品一区二区三区在线| 99热这里只有精品66| 久久久综合视频| 久久av综合网| 日韩成人精品| 色综合影院在线| 国产精品人人人人| 国产sm精品调教视频网站| 亚洲精品国产系列| 日韩电影网站| 亚洲精品suv精品一区二区| 国产精品成人69xxx免费视频 | 国产精品久久久久久久久免费 | 在线观看欧美成人| 九九热在线视频播放| 国产91丝袜在线观看| 国产系列第一页| 天然素人一区二区视频| 日韩精品福利在线| 久久精品亚洲无码| 国产成人在线色| 少妇高潮大叫好爽喷水| 国产成人精品一区二区三区免费| 精品亚洲一区二区三区| 久久久久久久久久久久久久久久久 | 欧美性受xxx| 熟妇人妻一区二区三区四区 | 国产午夜精品在线观看| 国产极品在线视频| 国产一区调教| 韩国精品久久久999| 丰满人妻一区二区三区免费视频| 亚洲激情中文1区| 天堂在线精品视频| 一区二区日韩欧美| 亚洲综合最新在线| 永久免费网站在线| 欧美不卡视频一区| 国产亚洲欧美精品久久久www| 日韩成人免费av| 麻豆成人久久精品二区三区红| 欧美极品色图| 欧美精品总汇| 视频在线观看99| 97人妻精品一区二区三区| 中文字幕色av一区二区三区| 国内国产精品天干天干| 亚洲欧美偷拍自拍| 99久久99久久| 日本在线影院| 尤物九九久久国产精品的特点 | 欧美在线一区二区三区四区| 久久青青视频| 日韩中文字幕在线视频| 精品国产亚洲一区二区麻豆| 亚洲一区二区三区四区在线观看 | 日韩欧美午夜| 亚洲在线视频观看| av美女在线观看| 亚洲人在线视频| 97人妻人人澡人人爽人人精品| 一区二区三区中文在线| 少妇精品无码一区二区三区| 亚洲影院一区| 一区国产精品| 国产精品毛片视频| 国产精品成熟老女人| 国产在线观看a视频| 亚洲国产欧美一区二区丝袜黑人| 国产成人无码av| 中文字幕在线观看不卡视频| 亚洲欧洲国产视频| 久久成人免费| 日韩精品一区二区三区电影| 欧美亚洲大陆| 国产在线日韩在线| 大桥未久在线视频| 日韩中文字幕免费看| 欧美一区二区三区黄片| 欧美丝袜丝交足nylons图片| 久久久综合久久久| 亚洲国产高清aⅴ视频| 一本色道久久hezyo无码| 三级欧美在线一区| 日本天堂免费a| 精品九九在线| 国产精品一区二区在线观看| 成人精品三级| 91极品女神在线| 久久久久久国产精品免费无遮挡 | 欧美电影h版| 久久国产加勒比精品无码| 午夜激情在线视频| 538在线一区二区精品国产| 好吊妞视频一区二区三区| 亚洲天堂a在线| 在线不卡av电影| 成人免费毛片app| 天天操精品视频| 日本欧美一区二区三区| www国产精品内射老熟女| 中文字幕午夜精品一区二区三区| 欧美一卡2卡3卡4卡无卡免费观看水多多| 99综合久久| 国产精品免费久久久久久| 久草免费在线视频| 欧美肥老妇视频| 日本在线视频观看| 亚洲性线免费观看视频成熟| 婷婷开心激情网| 日韩精品一区二区三区蜜臀| 亚洲综合精品国产一区二区三区| 欧美午夜片欧美片在线观看| 国产精品第72页| 亚洲黄色av一区| 四虎地址8848| 国产精品色呦呦| 美女100%露胸无遮挡| 国产亚洲女人久久久久毛片| 国产精品伦子伦| aa级大片欧美| 国模无码视频一区| 成人听书哪个软件好| 久草福利在线观看| 国产乱码字幕精品高清av | av电影在线观看不卡| 丰满人妻一区二区三区53视频| 久久99久久精品| 亚洲综合欧美激情| 美女在线视频一区| jizz大全欧美jizzcom| 日本不卡高清视频| 丝袜制服一区二区三区| 日本一不卡视频| 天天综合网日韩| 狠狠色丁香久久婷婷综合_中| 欧美成人福利在线观看| 久久精品国产精品青草| 奇米影视四色在线| 国产一区二区三区日韩| 992kp免费看片| 国产99久久久久久免费看农村| 性一交一黄一片| 福利一区二区在线观看| 亚洲av成人片无码| 91麻豆免费观看| 影音先锋制服丝袜| 青春草免费在线视频| 日韩欧美国产一区二区在线播放| 精品人妻一区二区三区换脸明星 | 欧洲天堂在线观看| 亚洲毛片在线看| av中文字幕在线| 久久国产精品影视| 成人在线免费观看黄色| 欧美中文在线免费| 懂色aⅴ精品一区二区三区| 成人性生交大片免费看小说| 2020国产精品极品色在线观看| 国产日韩精品推荐| 精品无人区麻豆乱码久久久| 中文字幕中文字幕99| 国内精品久久久久国产盗摄免费观看完整版| 婷婷五月综合缴情在线视频| 久久精品日韩欧美| www.久久av.com| www.一区二区| 亚洲午夜精品久久久久久高潮| 自拍偷拍欧美精品| 青青国产在线观看| 欧美日韩欧美一区二区| 亚洲第一免费视频| 国产午夜精品视频| 男人天堂亚洲天堂| 国产精品久久久久久久av电影| 996久久国产精品线观看| 久久99精品国产一区二区三区| 成人在线丰满少妇av| 日韩一区二区高清视频| 六月婷婷一区| 无码人妻一区二区三区在线视频| 国产iv一区二区三区| 山东少妇露脸刺激对白在线| 亚洲综合成人网| a片在线免费观看| 亚洲第一免费播放区| av资源网站在线观看| 国a精品视频大全| 在线免费观看亚洲| 麻豆av福利av久久av| 亚洲精品在线观看91| 熟妇人妻va精品中文字幕 | 欧美日韩黄色一区二区| 神马午夜电影一区二区三区在线观看| 日韩在线观看视频免费| 在线视频cao| 99精彩视频| 亚州av乱码久久精品蜜桃| aⅴ在线免费观看| 成人精品免费网站| 欧美日韩午夜视频| 色噜噜狠狠成人中文综合| 内射无码专区久久亚洲| 久久亚洲影音av资源网 | 国产免费无遮挡吸奶头视频| 亚洲成人你懂的| 国产欧美日韩综合精品一区二区三区 | 日韩综合一区| 国产精品第157页| 国产在线一区观看| 一级特黄曰皮片视频| 色综合天天狠狠| 你懂的网站在线| 色中色综合影院手机版在线观看| 欧美成人家庭影院| 青青草成人激情在线| 国产视频亚洲| 水蜜桃av无码| 婷婷夜色潮精品综合在线| 欧美熟妇交换久久久久久分类| 免费97视频在线精品国自产拍| 涩涩涩久久久成人精品| 日本在线观看不卡| 久久人人97超碰国产公开结果| 亚洲中文字幕无码一区| 亚洲一本大道在线| 亚洲国产福利视频| 欧美麻豆久久久久久中文| 国产麻豆一区二区三区| 亚洲第一综合网站| 国内精品写真在线观看| 国产真实乱在线更新| 8x福利精品第一导航| 久操视频在线观看| 91网站在线看| 欧美国内亚洲| 中文字幕乱码在线人视频| 玉足女爽爽91| 四虎免费在线观看| 97激碰免费视频| 日韩av午夜| 黑鬼大战白妞高潮喷白浆| 国产欧美精品一区aⅴ影院| 中文字幕日韩国产| 丝袜情趣国产精品| 国产精品一区二区美女视频免费看 | www.亚洲自拍| 亚洲综合激情另类小说区| 久精品国产欧美| 不卡一区综合视频| 精品久久久99| 一区二区在线观看免费视频播放| 色呦呦中文字幕| 国产z一区二区三区| 热久久天天拍国产| 免费人成视频在线播放| 亚洲电影一区二区三区| 日本亚洲欧美| 国产欧美日韩中文| 欧美区一区二| 中文人妻一区二区三区| 精品1区2区3区| 久久青青色综合| 欧美一级二级三级九九九| 久久精品99国产国产精| 精品99在线观看| 亚洲毛片在线看| 不卡一区视频| 内射国产内射夫妻免费频道| 亚洲国产精品成人综合| 亚洲精品911| 国产精品久久久久久久av电影| 欧美激情视频一区二区三区在线播放 | 亚洲色图35p| 我要色综合中文字幕| 国产精品秘入口18禁麻豆免会员| 国产精品理伦片| 色婷婷激情五月| 国产有码在线一区二区视频| 亚洲黄色大片| 亚洲视频重口味| 日韩精品在线观看一区| 国产999精品在线观看| 春日野结衣av| 一区二区不卡在线播放 | 日本中文字幕在线播放| 国产精品三区四区|