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

Android 自定義 BaseAdapter 最佳實踐

移動開發 Android
雖然現在很多新的項目都在使用RecyclerView,但是很多開發者在一些場景中還是傾向使用ListView或者GridView,然后就是需要寫許多的Adapter。

雖然現在很多新的項目都在使用RecyclerView,但是很多開發者在一些場景中還是傾向使用ListView或者GridView,然后就是需要寫許多的Adapter。一次項目組在新啟動一個新項目的時候,有個同事拿來了一個網上說的***Adapter,在使用的時候發現即使在單個視圖類型一旦邏輯判斷比較復雜情況下非常不方便,更不用說在適配器Adapter中使用多視圖類型了,這里僅是個人觀點,也許沒有掌握到精華。

[[191680]]

當然了隨著RecyclerView的使用,網上也有很多有關對RecyclerView多視圖類型Adapter封裝的博客,MultiType 3.0是一個大神寫的比較全面的Adapter,***適配器Adapter自己使用不是很方便,于是就參看RecyclerView中Adapter的實現方式進行對BaseAdapter進行了簡單的封裝,封裝的目一是為了少寫代碼,另外一個就是讓邏輯看上去更清晰一些。我們知道在RecyclerView的Adapter實現中它將視圖創建與數據綁定進行了分離,同時將對View的查找創建也剝離開來了,本文就主要介紹如何將BaseAdapter的使用封裝為跟RecyclerView的Adapter使用方式一致。由于很多時候在Adapter中我們都是使用的簡單的視圖類型,即單類型視圖,因此本文將單視圖類型的Adapter單獨封裝了一下,比使用多視圖類型的Adapter使用了更嚴格的數據類型檢查,同時在使用上也方便了許多。

 

[[191681]]

RecyclerView中Adapter的使用

在使用RecyclerView的Adapter的時候我們首先需要繼承RecyclerView的一個靜態內部類Adapter,然后重寫三個方法,實際上下面三個方法是必須要重寫的,因為都是抽象方法。

  • getItemCount()
  • onBindViewHolder(VH holder, int position)
  • onCreateViewHolder(ViewGroup parent, int viewType)

一般情況下重寫上面三個方法就可以,但是如果存在多視圖類型,在第三個方法

onCreateViewHolder()方法中我們也可以看到有一個參數是viewType,該參數作用就是針對不同的viewType需要創建不同的ViewHolder,因此還需要重寫一個方法getItemViewType(int position),針對多視圖類型同BaseAdapter實現方式倒是很像,在BaseAdapter中這是需要除此之外還要重寫一個方法getViewTypeCount(),但是在RecyclerView的Adapter中不需要該方法。

簡單類型Adapter

  1. private class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { 
  2.  
  3.     @Override 
  4.     public int getItemCount() { 
  5.         return COUNT
  6.     } 
  7.  
  8.     @Override 
  9.     public void onBindViewHolder(MyViewHolder holder, int position) { 
  10.         holder.textView.setText("TEXT_" + position); 
  11.     } 
  12.  
  13.     @Override 
  14.     public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
  15.         View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_text, parent, false); 
  16.         MyViewHolder holder = new MyViewHolder(view); 
  17.         return holder; 
  18.     } 
  19.  
  20.  
  21. private static class MyViewHolder extends RecyclerView.ViewHolder { 
  22.     private TextView textView; 
  23.  
  24.     public MyViewHolder(View itemView) { 
  25.         super(itemView); 
  26.         textView = (TextView) itemView.findViewById(R.id.textView); 
  27.     } 

復雜類型Adapter

  1. private class MyAdapter extends RecyclerView.Adapter<ViewHolder> { 
  2.  
  3.     @Override 
  4.     public int getItemCount() { 
  5.         return COUNT
  6.     } 
  7.  
  8.     @Override 
  9.     public int getItemViewType(int position) { 
  10.         return position % 2 == 0 ? TYPE_IMAGE : TYPE_TEXT; 
  11.     } 
  12.  
  13.     @Override 
  14.     public void onBindViewHolder(ViewHolder holder, int position) { 
  15.         int type = getItemViewType(position); 
  16.         switch (type) { 
  17.         case TYPE_TEXT: 
  18.             ((MyTextHolder) holder).textView.setText("TEXT_" + position); 
  19.             break; 
  20.         case TYPE_IMAGE: 
  21.             ((MyImageHolder) holder).imageView.setImageResource(R.drawable.image); 
  22.             break; 
  23.         } 
  24.     } 
  25.  
  26.     @Override 
  27.     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
  28.         View view
  29.         ViewHolder holder = null
  30.         switch (viewType) { 
  31.         case TYPE_TEXT: 
  32.             view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_text, parent, false); 
  33.             holder = new MyTextHolder(view); 
  34.             break; 
  35.         case TYPE_IMAGE: 
  36.             view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_image, parent, false); 
  37.             holder = new MyImageHolder(view); 
  38.             break; 
  39.         } 
  40.         return holder; 
  41.     } 
  42.  
  43. private class MyTextHolder extends RecyclerView.ViewHolder { 
  44.     private TextView textView; 
  45.  
  46.     public MyTextHolder(View itemView) { 
  47.         super(itemView); 
  48.         textView = (TextView) itemView.findViewById(R.id.textView); 
  49.     } 
  50.  
  51. private class MyImageHolder extends ViewHolder { 
  52.     private ImageView imageView; 
  53.  
  54.     public MyImageHolder(View itemView) { 
  55.         super(itemView); 
  56.         imageView = (ImageView) itemView.findViewById(R.id.imageView); 
  57.     } 

自定義BaseAdapter

在自定義基類之前,先簡單分析一下,我們需要自定義一個支持單種視圖的Adapter,還要自定義一個支持多種視圖類型的Adapter,兩個類都要繼承BaseAdapter,先將兩個類都公用的部分抽取出來定義為MyAdapter。

  1. public abstract class MyAdapter<T> extends BaseAdapter { 
  2.  
  3.     protected List<T> dataList = new ArrayList<>(); 
  4.     protected Context context; 
  5.     protected LayoutInflater inflater; 
  6.  
  7.     public MyAdapter(Context context) { 
  8.         this.context = context; 
  9.         inflater = LayoutInflater.from(context); 
  10.     } 
  11.  
  12.     public void setDataList(List<T> dataList) { 
  13.         this.dataList = dataList; 
  14.         notifyDataSetChanged(); 
  15.     } 
  16.  
  17.     @Override 
  18.     public int getCount() { 
  19.         if (null == dataList) { 
  20.             return 0; 
  21.         } 
  22.         return dataList.size(); 
  23.     } 
  24.  
  25.     @Override 
  26.     public T getItem(int position) { 
  27.         return dataList.get(position); 
  28.     } 
  29.  
  30.     @Override 
  31.     public long getItemId(int position) { 
  32.         return position; 
  33.     } 
  34.  

在RecyclerView的Adapter實現中是沒有getView()方法的,下面我們就分析一下getView()方法如何拆分,一般情況下我們在實現getView()方法都是如下流程。

  1. public View getView(int position, View convertView, ViewGroup parent) { 
  2.     ViewHolder holder = null
  3.     if (null == convertView) { 
  4.         //填充布局 
  5.         convertView=inflater.inflate(R.layout.item_layout, parent,false); 
  6.         holder = new ViewHolder(); 
  7.         //通過ID查詢控件 
  8.         holder.textView=(TextView)convertView.findViewById(R.id.textView); 
  9.         holder.imageView=(ImageView)convertView.findViewById(R.id.imageView); 
  10.         convertView .setTag(holder); 
  11.     } else { 
  12.         holder = (ViewHolder) convertView.getTag(); 
  13.     } 
  14.     //賦值邏輯 
  15.     return convertView; 
  16. //一個空的ViewHolder 
  17. public static class ViewHolder{ 
  18.     TextView textView; 
  19.     ImageView imageView; 

Java編程比較流行的一種編程方式不是說面向接口編程嗎,在Android開發中也有一個開發方式叫做面向Holder的編程,上面代碼是傳統的實現ViewHolder的方式,說句實現話就沒做什么事,就是作為一個載體承載著我們需要的控件。我們讓ViewHolder多做一些事情,讓它在convertView==null情況下需要做的多數邏輯都放到ViewHolder中去。

  1. public class ViewHolder { 
  2.     private final View itemView; 
  3.  
  4.     public ViewHolder(View itemView) { 
  5.         if (null == itemView) { 
  6.             throw new IllegalArgumentException("itemView must not be null"); 
  7.         } else { 
  8.             this.itemView = itemView; 
  9.             itemView.setTag(this); 
  10.         } 
  11.     } 
  12.  
  13.     public View getItemView() { 
  14.         return itemView; 
  15.     } 

在ViewHolder中的itemView就是getView()方法中的convertView,這里剛好是條目的根View,類似RecyclerView中ViewHolder構造方法中itemView。由于不同的視圖需要創建不同的ViewHolder,因此我們可以將創建ViewHolder的方法設置為抽象的方法暴露出去,另外賦值的時候我們也需要根據具體的業務進行賦值,同樣設置一個抽象方法。

  1. public abstract class SimpleAdapter<T,VH extends ViewHolder> extends MyAdapter<T> { 
  2.  
  3.     public SimpleAdapter(Context context) { 
  4.         super(context); 
  5.     } 
  6.  
  7.     public View getView(int position, View convertView, ViewGroup parent) { 
  8.         VH holder = null
  9.         if (null == convertView) { 
  10.             holder = onCreateViewHolder(parent); 
  11.             convertView = holder.getItemView(); 
  12.         } else { 
  13.             holder = (VH) convertView.getTag(); 
  14.         } 
  15.         onBindViewHolder(holder, position); 
  16.         return convertView; 
  17.     } 
  18.  
  19.     public abstract void onBindViewHolder(VH holder, int position); 
  20.  
  21.     public abstract VH onCreateViewHolder(ViewGroup parent); 
  22.  

在設置多視圖類型的Adapter的時候只需要在創建ViewHolder的時候多傳入一個viewType的參數即可。

  1. public abstract class MultiAdapter<T> extends MyAdapter<T> { 
  2.  
  3.     public MultiAdapter(Context context) { 
  4.         super(context); 
  5.     } 
  6.  
  7.     @Override 
  8.     public View getView(int position, View convertView, ViewGroup parent) { 
  9.         ViewHolder holder = null
  10.         if (null == convertView) { 
  11.             holder = onCreateViewHolder(parent, getItemViewType(position)); 
  12.             convertView = holder.getItemView(); 
  13.         } else { 
  14.             holder = (ViewHolder) convertView.getTag(); 
  15.         } 
  16.         onBindViewHolder(holder, position); 
  17.         return convertView; 
  18.     } 
  19.  
  20.     public abstract void onBindViewHolder(ViewHolder holder, int position); 
  21.  
  22.     public abstract ViewHolder onCreateViewHolder(ViewGroup parent, int viewType); 
  23.  

自定義BaseAdapter的使用

單視圖類型SimpleAdapter使用

  1. public class TextAdapter extends SimpleAdapter<String, TextAdapter.TextHolder> { 
  2.  
  3.     public TextAdapter(Context context) { 
  4.         super(context); 
  5.     } 
  6.  
  7.     @Override 
  8.     public void onBindViewHolder(TextHolder holder, int position) { 
  9.         holder.textView.setText(getItem(position)); 
  10.     } 
  11.  
  12.     @Override 
  13.     public TextHolder onCreateViewHolder(ViewGroup parent) { 
  14.         View convertView=inflater.inflate(R.layout.item_text, parent, false); 
  15.         return new TextHolder(convertView); 
  16.     } 
  17.  
  18.     static class TextHolder extends ViewHolder{ 
  19.  
  20.         public TextView textView; 
  21.  
  22.         public TextHolder(View itemView) { 
  23.             super(itemView); 
  24.             textView=(TextView) itemView.findViewById(R.id.textView); 
  25.         } 
  26.     } 

這里我們使用了兩個泛型,一個是ViewHolder中支持的數據類型String,另外一個就是我們需要創建的ViewHolder,這樣在onCreateViewHolder方法的返回值就會自動返回我們自定義的ViewHolder,有關泛型更多的知識可以參看Java泛型使用解析,單視圖類型Adapter的使用比RecyclerView的Adapter還要方便許多。

多視圖類型的使用

  1. public class RichAdapter extends MultiAdapter<String> { 
  2.  
  3.     private static final int TEXT = 0; 
  4.     private static final int PIC = 1; 
  5.  
  6.     public RichAdapter(Context context) { 
  7.         super(context); 
  8.     } 
  9.  
  10.     @Override 
  11.     public int getViewTypeCount() { 
  12.         return 2; 
  13.     } 
  14.  
  15.     @Override 
  16.     public int getItemViewType(int position) { 
  17.         if (position % 3 == 0) { 
  18.             return PIC; 
  19.         } else { 
  20.             return TEXT; 
  21.         } 
  22.     } 
  23.  
  24.     @Override 
  25.     public void onBindViewHolder(ViewHolder holder, int position) { 
  26.         switch (getItemViewType(position)) { 
  27.         case TEXT: 
  28.             TextHolder textHolder=(TextHolder) holder; 
  29.             textHolder.textView.setText(getItem(position)); 
  30.             break; 
  31.         case PIC: 
  32.             ImageHolder imageHolder=(ImageHolder) holder; 
  33.             imageHolder.imageView.setImageResource(R.drawable.image); 
  34.             break; 
  35.         } 
  36.     } 
  37.  
  38.     @Override 
  39.     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
  40.         View itemView = null
  41.         ViewHolder holder = null
  42.         switch (viewType) { 
  43.         case TEXT: 
  44.             itemView = inflater.inflate(R.layout.item_text, parent, false); 
  45.             holder = new TextHolder(itemView); 
  46.             break; 
  47.         case PIC: 
  48.             itemView = inflater.inflate(R.layout.item_image, parent, false); 
  49.             holder = new ImageHolder(itemView); 
  50.             break; 
  51.         } 
  52.         return holder; 
  53.     } 
  54.  
  55.     private static class TextHolder extends ViewHolder { 
  56.         TextView textView; 
  57.  
  58.         public TextHolder(View itemView) { 
  59.             super(itemView); 
  60.             textView = (TextView) itemView.findViewById(R.id.textView); 
  61.         } 
  62.  
  63.     } 
  64.  
  65.     private static class ImageHolder extends ViewHolder { 
  66.         ImageView imageView; 
  67.  
  68.         public ImageHolder(View itemView) { 
  69.             super(itemView); 
  70.             imageView = (ImageView) itemView.findViewById(R.id.imageView); 
  71.         } 
  72.     } 

這里的使用情況跟RecyclerView的使用幾乎是一模一樣,唯一不一樣的地方就是多寫了一個getViewTypeCount()方法,在ListView或者GridView使用BaseAdapter實現多種類型視圖的時候該方法必須要重寫。

責任編輯:武曉燕 來源: 碼農網
相關推薦

2017-05-18 12:36:16

android萬能適配器列表視圖

2010-08-12 09:45:33

jQuery自定義事件

2023-12-21 09:00:21

函數React 組件useEffect

2016-12-26 15:25:59

Android自定義View

2016-11-16 21:55:55

源碼分析自定義view androi

2025-01-22 11:10:34

2013-04-01 14:35:10

Android開發Android自定義x

2025-05-15 07:11:51

2016-04-12 10:07:55

AndroidViewList

2010-02-07 14:02:16

Android 界面

2023-06-28 08:05:46

場景vue3自定義

2015-02-12 15:33:43

微信SDK

2023-06-27 15:02:47

2013-01-09 17:22:38

Android開發Camera

2015-02-12 15:38:26

微信SDK

2013-05-02 14:08:18

2014-12-10 10:37:45

Android自定義布局

2015-02-11 17:49:35

Android源碼自定義控件

2014-12-17 09:46:30

AndroidListView最佳實踐

2018-09-28 05:18:41

點贊
收藏

51CTO技術棧公眾號

91精品国产手机| 国产蜜臀av在线一区二区三区 | 手机看片1024日韩| 国产精品magnet| 精品亚洲aⅴ在线观看| 成人性生生活性生交12| yjizz视频网站在线播放| 日产国产欧美视频一区精品| 久久好看免费视频| 少妇一级淫免费观看| 日本美女久久| 亚洲一区二区三区免费视频| 久久99久久精品国产| 中文字幕乱码人妻二区三区| 亚洲最新av| 亚洲人成电影网站色| 中文字幕在线视频一区二区| sm性调教片在线观看| 欧美国产日韩精品免费观看| 1区1区3区4区产品乱码芒果精品| 麻豆精品久久久久久久99蜜桃| 图片小说视频色综合| 亚洲人成电影在线| 麻豆精品国产传媒av| 91成人短视频在线观看| 狠狠躁夜夜躁人人爽天天天天97| 亚洲小说欧美另类激情| 久草福利在线视频| thepron国产精品| 91午夜理伦私人影院| 日本免费精品视频| 国产日韩欧美一区在线| 欧美激情欧美狂野欧美精品 | 可以免费看毛片的网站| 麻豆久久久久久| 欧美中文字幕第一页| 成年人一级黄色片| 日韩欧美不卡| 亚洲天堂免费视频| 三级男人添奶爽爽爽视频| 97久久精品| 日韩欧美成人激情| 欧美激情第一区| 只有精品亚洲| 欧美高清www午色夜在线视频| 波多野结衣作品集| 男人皇宫亚洲男人2020| 欧美日韩国产一区中文午夜| 国产日产欧美一区二区| 久久精品视频观看| 亚洲色图欧美偷拍| 亚州欧美一区三区三区在线| 黄色软件在线| 国产蜜臀av在线一区二区三区| 欧美日韩成人一区二区三区| 五月婷婷综合久久| 91亚洲国产成人精品一区二三| 国产精品sss| 日本xxxx人| 91在线看国产| 欧美日韩在线一区二区三区| 久久久久久青草| 国产欧美综合在线| 亚洲电影一二三区| 九义人在线观看完整免费版电视剧| 国产精品色在线| 亚洲天堂av免费在线观看| 国产黄网站在线观看| 亚洲精品国产无天堂网2021| 精品视频在线观看一区二区| 国产三级伦理在线| 黑丝美女久久久| 亚洲不卡视频在线| 四虎影视成人精品国库在线观看| 91精品在线观看入口| 国产sm在线观看| 欧美巨大xxxx| 中文字幕欧美日韩在线| 国产男女猛烈无遮挡在线喷水| 欧美在线观看天堂一区二区三区| 久久久久久久999| 青青青国产在线 | 国产不卡在线观看| 中文字幕在线2018| 国产精品白丝jk黑袜喷水| 国产亚洲一区在线播放 | 久久wwww| 亚洲免费av片| 男女做暖暖视频| 日韩午夜在线| 国产女精品视频网站免费| 精品国产免费无码久久久| 99久久精品国产精品久久| 日韩精品资源| 欧美理论片在线播放| 色综合天天狠狠| 国产欧美精品一二三| 久久aimee| 中文字幕日韩av电影| 久久97人妻无码一区二区三区| 亚洲一区二区三区免费在线观看 | 2021年精品国产福利在线| 日韩精品中文字幕视频在线| 黄色录像一级片| 一区二区三区国产盗摄| 国产中文字幕亚洲| 日本免费一区二区三区最新| 亚洲少妇30p| 日韩在线xxx| 中文无码日韩欧| 在线看福利67194| 日本少妇bbwbbw精品| 毛片一区二区三区| 蜜桃精品久久久久久久免费影院| av在线免费播放| 在线观看日韩av先锋影音电影院| 日本一级大毛片a一| 日韩在线不卡| 国产成人精品在线视频| 囯产精品一品二区三区| 亚洲欧美综合色| 亚洲欧美另类动漫| 美国十次av导航亚洲入口| 日韩在线精品一区| av手机天堂网| 久久久综合精品| 久久久天堂国产精品| 8av国产精品爽爽ⅴa在线观看| 亚洲第一国产精品| 久久久久久久久毛片| 老鸭窝毛片一区二区三区| 高清国产在线一区| yellow91字幕网在线| 欧美亚洲丝袜传媒另类| 大又大又粗又硬又爽少妇毛片| 欧美天天视频| 91在线精品视频| 日本韩国在线视频爽| 91成人免费在线| 麻豆精品免费视频| 新67194成人永久网站| 九九久久99| 17videosex性欧美| 日韩欧美专区在线| 日韩女优一区二区| 国产麻豆91精品| 五月天色婷婷综合| 亚洲欧美在线人成swag| 深夜精品寂寞黄网站在线观看| 国产又粗又猛又爽又| 久久久久久久久久久久久久久99 | 亚洲国产精品专区久久| 久久久综合久久久| 国产成人无遮挡在线视频| 国产女主播av| 日韩三级不卡| 欧美激情亚洲精品| 日本黄色免费视频| 精品成人在线视频| 丰满少妇一区二区| 日韩电影在线观看网站| 性高潮久久久久久久久| 中文成人在线| 欧美激情精品久久久久久黑人| 亚洲第一色网站| 亚洲成人综合网站| 亚洲狠狠婷婷综合久久久久图片| 国产精品社区| 日韩精品无码一区二区三区| 成人黄页网站视频| 久久久999精品| 好吊色视频一区二区| 狠狠躁夜夜躁人人爽超碰91| 欧美做受高潮6| 久久成人免费网| 欧美黄色免费网址| 亚洲成a人片77777在线播放| 国产欧美一区二区三区视频| av电影免费在线观看| 欧美精品一区在线观看| 国产成人免费看| 国产精品网站在线播放| 国产高清av片| 宅男噜噜噜66国产日韩在线观看| 三区精品视频| 日本在线一区二区三区| 欧美一级淫片aaaaaaa视频| 超碰免费97在线观看| 欧美一区二区三区视频免费| 亚洲天堂日韩av| ...中文天堂在线一区| 图片区偷拍区小说区| 日韩精彩视频在线观看| 亚洲av综合色区| 久久99国产成人小视频| 成人字幕网zmw| sis001欧美| 久久视频这里只有精品| 视频一区二区在线播放| 在线免费不卡电影| 久久国产在线观看| 国产农村妇女精品| 91视频在线免费| 极品尤物av久久免费看| 国产亚洲综合视频| 亚洲欧美综合国产精品一区| 日本高清不卡一区二区三| 日韩高清一区| 国产精品爽爽爽| 国产拍在线视频| 久久av资源网站| 日韩欧美亚洲系列| 日韩女优av电影| 一级成人免费视频| 一本大道久久精品懂色aⅴ| 欧美日韩中文字幕在线观看 | 日本黄色免费片| 久久这里只有精品视频网| 潘金莲一级淫片aaaaa| 久久国产精品免费| www日韩在线观看| 亚洲美女一区| 精品免费久久久久久久| 久久亚洲影视| 日韩久久久久久久| 亚洲人亚洲人色久| 九九99久久| theporn国产在线精品| 91香蕉亚洲精品| 99欧美精品| 国产91在线播放精品91| 久久男人av资源站| 久久免费视频在线| 污视频网站免费在线观看| 深夜福利亚洲导航| 午夜伦理在线| 中文国产成人精品| 在线激情小视频| 中文国产成人精品久久一| 精品视频二区| 亚洲欧美在线看| 飘雪影院手机免费高清版在线观看 | 久久久不卡网国产精品二区| 久久午夜夜伦鲁鲁片| av亚洲产国偷v产偷v自拍| avtt中文字幕| 99在线精品免费| 国产精品伦子伦| 91伊人久久大香线蕉| 久操视频免费看| 欧美激情综合五月色丁香小说| 我不卡一区二区| 国产精品素人一区二区| 国产精品视频在| 中文字幕日韩精品一区| 国产精品白丝喷水在线观看| 亚洲啪啪综合av一区二区三区| 国产探花在线免费观看| 一区二区三区视频在线观看| 久草中文在线视频| 精品福利在线观看| 黄色免费av网站| 欧美午夜影院一区| 国产色片在线观看| 精品精品欲导航| 天堂a中文在线| 国产亚洲精品久久久久久| 77导航福利在线| 欧美精品免费播放| zzzwww在线看片免费| 欧美专区在线视频| 精品美女一区| 亚洲综合最新在线| 日本成人中文| 亚欧洲精品在线视频免费观看| 亚洲九九在线| 国产原创popny丨九色| 日韩成人午夜精品| 91人妻一区二区三区| 99riav一区二区三区| a天堂中文字幕| 亚洲欧美偷拍另类a∨色屁股| 久久精品久久国产| 91黄视频在线观看| av男人天堂av| 精品香蕉在线观看视频一| 久热国产在线| 清纯唯美亚洲激情| 99精品美女视频在线观看热舞| 成人看片视频| 国产乱码精品一区二区三区四区 | mm131美女视频| 亚洲天堂av一区| 99热在线观看免费精品| 欧美精品日韩一区| 香蕉视频免费在线看| y97精品国产97久久久久久| 久久不射影院| 国产精品网红直播| 老牛影视av一区二区在线观看| 亚洲国产一区二区精品视频| 欧美午夜一区| 欧美精品久久久久久久久25p| 成人看片黄a免费看在线| 网爆门在线观看| 欧美视频在线观看免费| av网站免费播放| 最近中文字幕mv在线一区二区三区四区| 四虎亚洲成人| 成人国产精品一区二区| 亚洲精华一区二区三区| 欧美 日韩 国产精品| 日韩影院精彩在线| 中国一级特黄录像播放| 亚洲色图都市小说| 亚洲视屏在线观看| 日韩精品一区二区三区第95| 手机av免费在线| 91亚洲精品久久久久久久久久久久| 亚洲va久久| 日韩中文字幕在线视频观看| 国产乱一区二区| www.99re6| 欧美日韩一级二级三级| 麻豆导航在线观看| 97国产一区二区精品久久呦| 日韩精品免费视频一区二区三区| 亚洲一区二区三区精品视频| 久久精品人人| 中文在线永久免费观看| 亚洲在线视频一区| 国内老熟妇对白xxxxhd| 久久av在线看| 精品一区二区三区亚洲| 中国一区二区三区| 久久精品国产网站| 可以免费看av的网址| 欧美日免费三级在线| 国产黄色免费在线观看| 日韩av色在线| 久久99视频| 欧美日韩大尺度| 欧美激情一区二区三区不卡| 亚洲色成人www永久网站| 亚洲人在线观看| 电影一区二区| 亚洲精品成人久久久998| 秋霞午夜鲁丝一区二区老狼| 2019男人天堂| 91精品国产乱| 午夜影院免费在线| 国产精品青青草| 亚洲精品影视| 一区二区三区免费在线观看视频 | 亚洲一区二区影视| 日韩最新免费不卡| www.久久久久爱免| 久久久99精品视频| 成人av在线一区二区三区| 国产极品美女高潮无套嗷嗷叫酒店| 精品国产乱子伦一区| 手机在线理论片| 欧美日本韩国国产| 久久电影网电视剧免费观看| 手机在线免费看毛片| 欧美va亚洲va在线观看蝴蝶网| 白白色在线观看| 欧美精品亚洲| 久久国产精品一区二区| 国产一级黄色av| 日韩福利视频在线观看| 欧美va在线观看| 最近看过的日韩成人| 成人性生交大片免费看中文网站| 国内免费精品视频| 一区二区三区视频在线| 国产剧情一区二区在线观看| 成人免费性视频| 国产亚洲自拍一区| 国产精选久久久| 久久91精品国产| 女人丝袜激情亚洲| 亚洲图色中文字幕| 亚洲午夜日本在线观看| 狠狠v欧美ⅴ日韩v亚洲v大胸| 91精品视频播放| 亚洲综合国产| 午夜成人亚洲理伦片在线观看| 精品国产第一区二区三区观看体验| 欧美成人免费电影| 欧美日韩午夜爽爽| 久久香蕉国产线看观看99| 国产欧美第一页| 秋霞av国产精品一区| 婷婷六月综合| 伊人网伊人影院| 欧美成人一区二区三区在线观看| 成人开心激情| 久艹在线免费观看| 国产精品视频看|