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

詳解RecyclerView下拉刷新與上拉更多

開發 開發工具
在原來的文章中我提及了如何使用RecyclerView添加header與footer,今天我們來更深入的擴展一下使用RecyclerView實現常用的下拉刷新與上拉加載更多的功能。當然這些功能的實現也是基于前面的RecyclerView添加header與footer為基礎來實現的。

 [[169565]]

前言

在原來的文章中我提及了如何使用RecyclerView添加header與footer,今天我們來更深入的擴展一下使用RecyclerView實現常用的下拉刷新與上拉加載更多的功能。當然這些功能的實現也是基于前面的RecyclerView添加header與footer為基礎來實現的,不是很了解的可以先看看前面的文章可能能更好的幫助理解。

依賴

為了方法大家的使用我已經把他上傳到Jcenter中了,所以大家可以調用下面的代碼了直接獲取使用: 

  1. compile 'com.idisfkj.enchancerecyclerview:mylibrary:1.1.1' 

EnhanceRecyclerView

我將這個擴展的RecyclerView命名為EnhanceRecyclerView,繼承RecyclerView。我們知道既然要實現下拉刷新與上拉更多自然先要實現頭部與尾部的布局,所以我們先利用前面的知識來為EnhanceRecycleView添加header與footer 

  1. public void initView() { 
  2.         View headerView = LayoutInflater.from(getContext()).inflate(R.layout.head_layout, null); 
  3.         View footerView = LayoutInflater.from(getContext()).inflate(R.layout.footer_layout, null); 
  4.         addHeaderView(headerView); 
  5.         addFooterView(footerView); 
  6.     } 

 其中的布局文件就不多說了,至于addHeaderView與addFooterView方法可以查看我前面的那篇文章,有詳細的介紹

設置監聽器

既然要實現下拉刷新與上拉加載,自然少不了對監聽器的處理,所以下面來詳細介紹下對監聽器OnScrollListener與OnTouchListener的處理。

OnScrollListener

為EnhanceRecyclerView添加addOnScrollListener實現其中的onScrollStateChanged與onScrolled方法。

onScrolled

在onScrolled中我們主要做的是獲取EnhanceRcyclerView中item的總數量、視圖顯示中的***個item在EnhanceRecyclerView中所處的位置與視圖顯示中***一個item在EnhanceRecyclerView中所處的位置。

對于item的總數量很好獲取直接調用

 

  1. totalCount = getLayoutManager().getItemCount(); 

由于RecyclerView能實現LinearLayoutManager、GridLayoutManager與StaggeredGridLayoutManager不同的布局,所以另外兩個要根據不同的manager來獲取,還是看具體代碼吧 

  1. if (getLayoutManager() instanceof LinearLayoutManager) { 
  2.                     lastItem = ((LinearLayoutManager) getLayoutManager()).findLastVisibleItemPosition(); 
  3.                     firstVisible = ((LinearLayoutManager) getLayoutManager()).findFirstVisibleItemPosition(); 
  4.                 } else { 
  5.                     into = ((StaggeredGridLayoutManager) getLayoutManager()).findLastVisibleItemPositions(into); 
  6.                     firstInto = ((StaggeredGridLayoutManager) getLayoutManager()).findFirstVisibleItemPositions(firstInto); 
  7.                     lastItem = into[0]; 
  8.                     firstVisible = firstInto[0]; 
  9.                 } 

 onScrollStateChanged

獲取到了那三個關鍵數據以后,就可以在onScrollStateChanged中實現具體的邏輯,在這個方法中主要實現的是對上拉加載更多的處理 

  1. if (lastItem == adapter.getItemCount() + 1 && newState == RecyclerView.SCROLL_STATE_IDLE && !isLoad) { 
  2.                     ViewGroup.LayoutParams params = getFooterView(0).getLayoutParams(); 
  3.                     params.width = RecyclerView.LayoutParams.MATCH_PARENT; 
  4.                     params.height = RecyclerView.LayoutParams.WRAP_CONTENT; 
  5.                     getFooterView(0).setLayoutParams(params); 
  6.                     getFooterView(0).setVisibility(View.VISIBLE); 
  7.                     smoothScrollToPosition(totalCount); 
  8.                     isLoad = true
  9.                     loadMoreListener.onLoadMore(); 
  10.                 } 
  11.                 if (firstVisible == 0) { 
  12.                     isTop = true
  13.                 } else { 
  14.                     isTop = false
  15.                     RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) getHeaderView(0).getLayoutParams(); 
  16.                     params.width = RecyclerView.LayoutParams.MATCH_PARENT; 
  17.                     params.height = RecyclerView.LayoutParams.WRAP_CONTENT; 
  18.                     params.setMargins(0, -getHeaderView(0).getHeight(), 0, 0); 
  19.                     getHeaderView(0).setLayoutParams(params); 
  20.                 } 

 簡單說明下,核心就是判斷lastItem是否處在***的位置,如果是的話就繼續加載更多的操作,這里提供了一個對數據處理的接口所以只要實現loadMoreListener.onLoadMore();即可。

上拉加載更多核心就是這么多,其它的可以查看源碼

OnTouchListener

這個監聽器主要是對下拉刷新進行處理。我們要分別對其中我們所熟悉的MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE與MotionEvent.ACTION_UP進行處理。ACTION_DOWN就是簡單的獲取按下的坐標位置,這里就不多說了,下面主要的針對另外的兩個進行簡單說明。

ACTION_MOVE

這做的邏輯就是對觸摸后的處理,根據滑動的距離來動態的改變header的文本與布局視圖的顯示。 

  1. public void touchMove(MotionEvent event) { 
  2.         endY = event.getY(); 
  3.         moveY = endY - startY; 
  4.         //防止item向上滑出 
  5.         if (moveY > 0 && !isRefreshing) { 
  6.             //防止回退文本顯示異常 
  7.             scrollToPosition(0); 
  8.  
  9.             if (getHeaderView(0).getVisibility() == GONE) 
  10.                 getHeaderView(0).setVisibility(VISIBLE); 
  11.  
  12.             RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) getHeaderView(0).getLayoutParams(); 
  13.             params.width = RecyclerView.LayoutParams.MATCH_PARENT; 
  14.             params.height = RecyclerView.LayoutParams.WRAP_CONTENT; 
  15.             //使header隨moveY的值從頂部漸漸出現 
  16.             if (moveY >= 400) { 
  17.                 moveY = 100 + moveY / 4; 
  18.             } else { 
  19.                 moveY = moveY / 2; 
  20.             } 
  21.             viewHeight = getHeaderView(0).getHeight(); 
  22.             if (viewHeight <= 0) 
  23.                 viewHeight = 130; 
  24.             moveY = moveY - viewHeight; 
  25.             params.setMargins(0, (int) moveY, 0, 0); 
  26.             getHeaderView(0).setLayoutParams(params); 
  27.             if (moveY > 80) { 
  28.                 text.setText(getResources().getString(R.string.release_to_refresh)); 
  29.             } else { 
  30.                 text.setText(getResources().getString(R.string.pull_to_refresh)); 
  31.             } 
  32.         } else { 
  33.             if (getHeaderView(0).getVisibility() != GONE && !isRefreshing) { 
  34.                 getHeaderView(0).setVisibility(GONE); 
  35.             } 
  36.         } 
  37.     } 

 至于下拉時與頂部的距離變化是通過設置margin來動態改變的。

ACTION_UP

***的觸摸處理就是在離開屏幕時根據滑動的距離,是否調用加載數據的接口,或者隱藏下拉刷新頭部,具體還是看代碼吧。 

  1. public void touchUp() { 
  2.         if (!isRefreshing && (endY -startY) != 0 ) { 
  3.  
  4.             RecyclerView.LayoutParams params1 = (RecyclerView.LayoutParams) getHeaderView(0).getLayoutParams(); 
  5.             params1.width = RecyclerView.LayoutParams.MATCH_PARENT; 
  6.             params1.height = RecyclerView.LayoutParams.WRAP_CONTENT; 
  7.  
  8.             if (moveY >= 80) { 
  9.                 text.setText(getResources().getString(R.string.refreshing)); 
  10.                 params1.setMargins(0, 0, 0, 0); 
  11.                 isRefreshing = true
  12.                 //刷新數據 
  13.                 pullToRefresh.onRefreshing(); 
  14.             } else { 
  15.                 if (viewHeight <= 0) 
  16.                     viewHeight = 130; 
  17.                 params1.setMargins(0, -viewHeight, 0, 0); 
  18.                 getHeaderView(0).setVisibility(GONE); 
  19.             } 
  20.             getHeaderView(0).setLayoutParams(params1); 
  21.         } 
  22.     } 

 代碼中重要的地方都有指出相信都能看懂,這樣下拉與上拉的邏輯就基本實現了,下面來看接口的設計吧

下拉與上拉接口 

  1. public interface PullToRefreshListener { 
  2.         void onRefreshing(); 
  3.     } 
  4.  
  5.     public void setPullToRefreshListener(PullToRefreshListener pullToRefresh) { 
  6.         if (loadMoreListener == null) { 
  7.             initListener(); 
  8.         } 
  9.         this.pullToRefresh = pullToRefresh; 
  10.     } 
  11.  
  12.     public interface LoadMoreListener { 
  13.         void onLoadMore(); 
  14.     } 
  15.  
  16.     public void setLoadMoreListener(LoadMoreListener loadMoreListener) { 
  17.         if (pullToRefresh == null) { 
  18.             initListener(); 
  19.         } 
  20.         this.loadMoreListener = loadMoreListener; 
  21.     } 

 在運用是添加接口監聽時初始化前面為EnhanceRecyclerView所設置的監聽。

狀態重置設置

在調用下拉刷新或者上拉加載更多之后,我們為其構造通用方法實現,狀態的重置與數據的更新,方便統一調用。 

  1. public void setLoadMoreComplete() { 
  2.         RecyclerView.LayoutParams params = (LayoutParams) getFooterView(0).getLayoutParams(); 
  3.         params.width = 0; 
  4.         params.height = 0; 
  5.         getFooterView(0).setLayoutParams(params); 
  6.         getFooterView(0).setVisibility(View.GONE); 
  7.         this.getAdapter().notifyDataSetChanged(); 
  8.         isLoad = false
  9.     } 
  10.  
  11.     public void setRefreshComplete() { 
  12.         RecyclerView.LayoutParams params1 = (RecyclerView.LayoutParams) getHeaderView(0).getLayoutParams(); 
  13.         params1.width = RecyclerView.LayoutParams.MATCH_PARENT; 
  14.         params1.height = RecyclerView.LayoutParams.WRAP_CONTENT; 
  15.         params1.setMargins(0, -getHeaderView(0).getHeight(), 0, 0); 
  16.         getHeaderView(0).setLayoutParams(params1); 
  17.         getHeaderView(0).setVisibility(GONE); 
  18.         this.getAdapter().notifyDataSetChanged(); 
  19.         isRefreshing = false
  20.     } 

 所用工作已經完成下面來做個調用示范

使用

xml中引用 

  1. <com.idisfkj.mylibrary.EnhanceRecyclerView 
  2.         android:id="@+id/recyclerView" 
  3.         android:layout_width="match_parent" 
  4.         android:layout_height="match_parent"
  5. </com.idisfkj.mylibrary.EnhanceRecyclerView> 

 設置監聽 

  1. mRecyclerView.setPullToRefreshListener(new com.idisfkj.mylibrary.EnhanceRecyclerView.PullToRefreshListener() { 
  2.             @Override 
  3.             public void onRefreshing() { 
  4.                 refreshData(); 
  5.             } 
  6.         }); 
  7.         mRecyclerView.setLoadMoreListener(new EnhanceRecyclerView.LoadMoreListener() { 
  8.             @Override 
  9.             public void onLoadMore() { 
  10.                 loadMoreData(); 
  11.             } 
  12.         }); 

 

refreshData()與loadMoreData()加載數據的邏輯就不展示了,只是要記住在請求網絡數據完之后要在他們中調用相應的mRecyclerView.setRefreshComplete()與 mRecyclerView.setLoadMoreComplete()來重置狀態。

至于其他的Adapter、LayoutManager等的設置就不多說了,與原生的RecyclerView是一樣的。 

總結

其實總的來說難點有兩個

添加header與footer。這個前面已經攻克了,而且原理也相對簡單

實現觸摸與滑動監聽邏輯。這個主要是對邏輯的理解,對整個刷新的過程做個整體分析,就能很好的理解上面的代碼。對其中視圖的動態顯示做相應的變化與接口的調用就能很好的處理這些工程。

當然上面的實現可能還有瑕疵,希望指出,我會相應的做修改或者你們修改后可以提交給我,我統一做修改,謝謝!

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2015-03-23 18:11:39

UITableViewswift下拉刷新

2021-12-01 10:02:57

鴻蒙HarmonyOS應用

2016-12-26 15:39:35

Android下拉刷新頭部廣告位

2018-07-02 12:49:33

刷新控件動畫

2021-09-02 10:00:42

鴻蒙HarmonyOS應用

2013-07-17 16:33:02

下拉刷新listvie滾動到底部加載Android開發學習

2017-07-25 16:08:18

AndroidRecyclervie

2013-01-18 16:48:25

拉里·佩奇Google谷歌

2015-04-22 10:57:22

androidSwipeRefres

2015-05-13 09:36:18

js模擬手機下拉刷新

2024-07-02 10:00:55

2012-03-28 22:16:54

蘋果

2023-03-27 18:33:47

客服IM消息

2009-06-16 09:41:00

2015-03-19 10:12:36

下拉刷新開源組件

2012-05-02 14:41:04

jQuery

2018-02-23 10:30:15

Linux命令網絡連接

2020-09-14 06:24:57

USB ID
點贊
收藏

51CTO技術棧公眾號

1769国产精品| 日韩成人高清在线| 国产91沈先生在线播放| 天堂a√中文在线| 免费观看久久久4p| 欧美极品少妇xxxxⅹ免费视频| 亚洲天堂资源在线| 日韩一区二区三区四区五区| 亚洲一级二级三级在线免费观看| 鲁片一区二区三区| 国产乱淫av免费| 免费久久99精品国产自在现线| 中文字幕欧美精品在线| 四虎成人免费视频| 99久久er| 欧美日韩免费网站| 潘金莲一级淫片aaaaaa播放1| 三级网站免费观看| 国产在线视频一区二区三区| 日本韩国在线不卡| 国产精品99精品无码视| 日本一本不卡| 亚洲成在人线av| 免费在线观看污网站| 3d欧美精品动漫xxxx无尽| 一区二区三区毛片| 亚洲激情一区二区三区| 手机福利小视频在线播放| 国产美女在线观看一区| 国产精品免费视频xxxx| 国产成人无码精品| 亚洲特色特黄| 欧美乱妇高清无乱码| 国产精品情侣呻吟对白视频| 日韩精品导航| 精品少妇一区二区三区在线视频 | 在线观看av的网站| 久久综合九色综合欧美就去吻| 99精彩视频| 国产情侣av在线| 久久成人精品无人区| 日韩美女在线观看一区| 一区二区三区视频免费看| 亚洲调教视频在线观看| 欧美肥婆姓交大片| 亚洲熟女www一区二区三区| 91麻豆精品国产91久久久平台| 亚洲免费成人av电影| 精品黑人一区二区三区观看时间| 粉嫩一区二区三区四区公司1| 91精品国产色综合久久| 91小视频在线播放| 国产精品igao视频网网址不卡日韩| 欧美日精品一区视频| 在线观看av日韩| 日韩漫画puputoon| 欧美日韩日本视频| 色天使在线观看| 不卡精品视频| 日韩视频一区二区在线观看| 国产不卡的av| 伊人www22综合色| 精品精品欲导航| 插我舔内射18免费视频| 欧美一性一交| 国产丝袜精品第一页| 69精品无码成人久久久久久| 欧美一级精品| 久久天天躁狠狠躁夜夜躁2014| 国产精品国产精品88| 国产精品二区影院| 97在线视频免费播放| 日产精品久久久| 日韩电影一区二区三区| 成人国产在线激情| 成人av手机在线| 99综合电影在线视频| 欧美在线播放一区| 男人和女人做事情在线视频网站免费观看| 国产精品美女一区二区| wwwjizzjizzcom| 麻豆网站免费在线观看| 日本久久一区二区| 五月天激情播播| 老汉色老汉首页av亚洲| 国产亚洲精品一区二555| 久久久久久久麻豆| 在线综合视频| 成人激情视频免费在线| 日韩一区二区三区在线观看视频| 久久久亚洲精品石原莉奈| 在线精品亚洲一区二区| a国产在线视频| 欧美日韩电影在线播放| 成人午夜精品无码区| 精品日产免费二区日产免费二区| 在线视频欧美性高潮| 国产无套在线观看| 麻豆一区二区三| 国产伦精品一区二区三区四区免费| 国产香蕉视频在线看| 亚洲精品videosex极品| 午夜欧美福利视频| 91精品啪在线观看国产爱臀| 亚洲人成在线电影| 国产一级淫片a| 免费视频一区二区| 韩国精品一区二区三区六区色诱| 色的视频在线免费看| 调教+趴+乳夹+国产+精品| 91欧美视频在线| 网曝91综合精品门事件在线| 久久精品视频中文字幕| 国产精品久免费的黄网站| 国产精品综合二区| 特级西西444www大精品视频| av今日在线| 日韩一级大片在线观看| 久久精品在线观看视频| 性一交一乱一区二区洋洋av| 99国精产品一二二线| 一区二区高清不卡| 色婷婷激情一区二区三区| 在线观看一区二区三区四区| 国产精品7m凸凹视频分类| 欧美一级片在线播放| 国产 欧美 自拍| 亚洲私人影院在线观看| 国产aaaaa毛片| 一区二区导航| 欧美亚洲国产视频小说| 亚洲精品久久久久久久久久| 亚洲人一二三区| 色婷婷综合网站| 成人短片线上看| 国产精品福利在线观看| 暖暖视频在线免费观看| 怡红院av一区二区三区| 中文字幕55页| 国产精品久久占久久| 国产欧美日韩中文| jizzjizz在线观看| 在线观看亚洲a| 国产真实乱人偷精品人妻| 日韩一区二区久久| 久久久久久久有限公司| 成av人片在线观看www| 亚洲第一二三四五区| 香蕉视频一区二区| 99麻豆久久久国产精品免费| www.99热这里只有精品| 日韩精品导航| 国产精品狠色婷| av在线播放网| 欧美精品 国产精品| 天堂网avav| 国产99精品国产| 国产美女主播在线| 欧美变态网站| 日本久久91av| 1024免费在线视频| 91精品国产综合久久久久久 | 国产精品久久久久久久久久东京 | 中文字幕乱码日本亚洲一区二区| 熟女少妇精品一区二区| 成人婷婷网色偷偷亚洲男人的天堂| 国产精品精品久久久| 尤物网址在线观看| 日韩一区二区三区在线视频| 免费一级全黄少妇性色生活片| 成人不卡免费av| 北条麻妃69av| 99九九热只有国产精品| 91在线在线观看| 中文字幕人成乱码在线观看| 一区二区在线视频| 国产精品一级视频| 五月婷婷久久综合| 我不卡一区二区| 国产成人三级在线观看| 欧美三级在线观看视频| 成人91在线| 99理论电影网| 免费福利视频一区二区三区| www.欧美精品一二三区| 欧美亚洲精品在线观看| 色综合久久久网| 日韩激情小视频| 99久久婷婷国产综合精品电影 | 亚洲精品一二三**| 茄子视频成人在线| 超碰在线观看免费| 亚洲精品视频免费| 国产日韩欧美视频在线观看| 性久久久久久久久| 黑人と日本人の交わりビデオ| 国产精品77777| 99视频免费播放| 欧美午夜免费影院| 偷拍视频一区二区| 激情av综合| 成人午夜在线视频一区| 欧美aaaaa性bbbbb小妇| 久久中文字幕一区| 高清性色生活片在线观看| 日韩女优电影在线观看| 美女黄页在线观看| 疯狂蹂躏欧美一区二区精品| 成人高潮免费视频| 国产午夜亚洲精品午夜鲁丝片 | 国产深喉视频一区二区| 欧美日韩一区二区在线 | 一区二区国产精品| 91视频成人免费| 国产精品免费99久久久| 国产在线精品一区二区三区| 四虎精品永久免费| 国产精品久久久久久久av大片| 九九色在线视频| 久久精品在线播放| 在线观看免费黄色| 亚洲午夜精品视频| 男操女在线观看| 日韩国产中文字幕| 天天躁日日躁狠狠躁伊人| 日韩亚洲欧美综合| 国产原创中文av| 欧美性生活久久| 亚洲av无码精品一区二区| 黑人巨大精品欧美一区二区免费 | 午夜在线免费观看视频| 亚洲欧洲午夜一线一品| 色婷婷av一区二区三区之e本道| 在线播放91灌醉迷j高跟美女| 进去里视频在线观看| 91国偷自产一区二区三区观看 | 欧美日韩综合久久| 五月天亚洲一区| 精品综合在线| 日韩欧美黄色| 欧美激情导航| 免费av一区二区三区四区| 久久精品99| 天堂网av成人| 日韩中文不卡| 成人6969www免费视频| 亚洲精品中文字幕乱码三区不卡| 欧美一区二区三| 亚洲精品国产一区| 精品国产91| 一区不卡字幕| 综合国产在线| 欧美精品卡一卡二| 一本久道久久综合婷婷鲸鱼| 欧美精品99久久| 久久久成人网| 中文字幕在线综合| 妺妺窝人体色www在线小说| 国产精品久久久久久模特| av观看免费在线| 强制捆绑调教一区二区| 蜜臀一区二区三区精品免费视频 | 免播放器亚洲| 污污的网站18| 美国一区二区三区在线播放| 欧美成人手机在线视频| 国产成人午夜视频| 免费黄色三级网站| 国产午夜精品一区二区| 亚洲aaa视频| 亚洲国产综合视频在线观看| 国产69精品久久久久久久久久| 色88888久久久久久影院按摩| 一本色道久久综合熟妇| 欧美成人一区二区| 精品一二三区视频| 久久综合久久美利坚合众国| 8x8ⅹ拨牐拨牐拨牐在线观看| 国产成人精品一区二区| 国产精品一区二区三区四区在线观看| 国产精品美女久久久久av福利| 亚洲国产精品嫩草影院久久av| 午夜精品区一区二区三| 欧美日韩爆操| 天堂中文视频在线| 国产成人自拍网| 人人妻人人澡人人爽| 亚洲乱码中文字幕综合| 你懂的国产在线| 这里是久久伊人| 久青草国产在线| 蜜月aⅴ免费一区二区三区| 九色porny视频在线观看| 91精品在线看| 国内精品视频在线观看| www.日本三级| 蜜臀av性久久久久蜜臀aⅴ流畅| wwwxxx色| 中文字幕不卡在线观看| 国产特黄大片aaaa毛片| 欧美日韩电影在线播放| 男男电影完整版在线观看| 高清一区二区三区四区五区| 国产精品第一| 欧美1o一11sex性hdhd| 午夜视频精品| 成人日韩在线视频| 国产日韩欧美综合在线| 国产网址在线观看| 日韩一二三区不卡| 日本中文字幕伦在线观看| 日韩免费高清在线观看| 国产精品香蕉| 日本精品福利视频| 激情欧美一区二区| 日本人亚洲人jjzzjjz| 精品久久久久久久久国产字幕| 国产三区在线播放| 中文日韩电影网站| 欧美理论影院| 欧美精品人人做人人爱视频| 激情婷婷久久| 亚洲精品乱码久久久久久动漫| 久久精品网站免费观看| 精品美女久久久久| 精品国产三级a在线观看| a视频在线免费看| 亚洲a区在线视频| 欧美韩日高清| gogogo高清免费观看在线视频| 久久精品一区蜜桃臀影院| 国产无遮挡呻吟娇喘视频| 亚洲成人aaa| a'aaa级片在线观看| 国产乱码精品一区二区三区卡| 在线成人超碰| 香蕉视频色在线观看| 亚洲日本在线a| 国产又大又粗又长| 久热精品视频在线| 久久精品九色| wwwwww欧美| 成人自拍视频在线观看| 精品少妇久久久| 亚洲第五色综合网| 伊人久久综合一区二区| 欧美不卡在线一区二区三区| 先锋影音国产一区| 亚洲av无码一区二区三区人| 日韩欧美中文在线| 国产视频二区在线观看| 国产精品免费观看在线| 久久在线视频| 91丨porny丨九色| 午夜精品久久一牛影视| 日韩精品视频无播放器在线看 | 中文字幕 国产| 日韩在线观看免费高清| 精品精品视频| 免费观看美女裸体网站| 久久色成人在线| 在线观看一二三区| 欧美成人免费大片| 日韩大尺度在线观看| 欧美污视频网站| 国产精品美女www爽爽爽| 国产成人精品a视频| 国内成人精品一区| 国产一区二区区别| 亚洲精品国产久| 激情懂色av一区av二区av| 加勒比一区二区三区在线| 成人两性免费视频| 最新日韩av| 亚洲色图 激情小说| 欧美一区二区三区思思人| 久久久男人天堂| 五月天亚洲综合小说网| 国产精品99久久不卡二区| 自拍偷拍欧美亚洲| www.xxxx精品| 亚洲欧洲av| 亚洲高清av一区二区三区| 狠狠躁夜夜躁人人爽天天天天97 | 五月天国产精品| av电影在线观看| 国产精品视频500部| 日本视频一区二区三区| 激情综合五月网| 国产亚洲a∨片在线观看| 日韩影片在线观看| 波多结衣在线观看| 亚洲国产日韩a在线播放性色| 高清国产福利在线观看| 99久久99久久精品国产片| 青青草原综合久久大伊人精品优势 | 国产精品视频a| 欧美亚洲日本网站| 国产在线成人| 精品在线观看一区|