《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > Android系統原理與源碼分析
Android系統原理與源碼分析
OFweek電子工程網
摘要: 眾所周知,AlertDialog類對于顯示對話。關于AlertDialog的基本用法在這里就不詳細介紹了,網上有很多,讀者可以自己搜索。那么本文要介紹的是如何隨心所欲地控制AlertDialog。
Abstract:
Key words :

  眾所周知,AlertDialog類對于顯示對話。關于AlertDialog的基本用法在這里就不詳細介紹了,網上有很多,讀者可以自己搜索。那么本文要介紹的是如何隨心所欲地控制AlertDialog。

  現在我們來看看第一個需求:如果某個應用需要彈出一個對話框。當單擊“確定“按鈕時完成某些工作,如果這些工作失敗,對話框不能關閉。而當成功完成工作后,則關閉對話框。當然,無論何程度情況,單擊“取消”按鈕都會關閉對話框。

  這個需求并不復雜,也并不過分(雖然我們可以自己弄個Activity來完成這個工作,也可在View上自己放按鈕,但這顯示有些大炮打蚊子了,如果對話框上只有一行文本,費這么多勁太不值了)。但使用過AlertDialog的讀者都知道,無論單擊的哪個按鈕,無論按鈕單擊事件的執行情況如何,對話框是肯定要關閉的。也就是說,用戶無法控制對話框的關閉動作。實際上,關閉對話框的動作已經在Android" title="Android">Android SDK寫死了,并且未給使用者留有任何接口。但我的座右銘是“宇宙中沒有什么是不能控制的”。

  既然要控制對放框的關閉行為,首先就得分析是哪些類、哪些代碼使這個對話框關閉的。進入AlertDialog類的源代碼。在AlertDialog中只定義了一個變量:mAlert。這個變量是AlertController類型。AlertController類是Android的內部類,在com.android.internal.app包中,無法通過普通的方式訪問。也無法在Eclipse中通過按Ctrl鍵跟蹤進源代碼。但可以直接在Android源代碼中找到AlertController.java。我們再回到AlertDialog類中。AlertDialog類實際上只是一個架子。象設置按鈕、設置標題等工作都是由AlertController類完成的。因此,AlertController類才是關鍵。

  找到AlertController.java文件。打開后不要感到頭暈哦,這個文件中的代碼是很多地。不過這么多代碼對本文的主題也沒什么用處。下面就找一下控制按鈕的代碼。

  在AlertController類的開頭就會看到如下的代碼:

  View.OnClickListener mButtonHandler = new View.OnClickListener() {

  public void onClick(View v) {

  Message m = null;

  if (v == mButtonPositive && mButtonPositiveMessage != null) {

  m = Message.obtain(mButtonPositiveMessage);

  } else if (v == mButtonNegative && mButtonNegativeMessage != null) {

  m = Message.obtain(mButtonNegativeMessage);

  } else if (v == mButtonNeutral && mButtonNeutralMessage != null) {

  m = Message.obtain(mButtonNeutralMessage);

  }

  if (m != null) {

  m.sendToTarget();

  }

  // Post a message so we dismiss after the above handlers are executed

  mHandler.obtainMessage(ButtonHandler.MSG_DISMISS_DIALOG, mDialogInterface)

  .sendToTarget();

  }

  };

  從這段代碼中可以猜出來,前幾行代碼用來觸發對話框中的三個按鈕(Positive、Negative和Neutral)的單擊事件,而最后的代碼則用來關閉對話框(因為我們發現了MSG_DISMISS_DIALOG、猜出來的)。

  mHandler.obtainMessage(ButtonHandler.MSG_DISMISS_DIALOG, mDialogInterface)

  .sendToTarget();

  上面的代碼并不是直接來關閉對話框的,而是通過一個Handler來處理,代碼如下:

  private static final class ButtonHandler extends Handler {

  // Button clicks have Message.what as the BUTTON{1,2,3} constant

  private static final int MSG_DISMISS_DIALOG = 1;

  private WeakReference《DialogInterface》 mDialog;

  public ButtonHandler(DialogInterface dialog) {

  mDialog = new WeakReference《DialogInterface》(dialog);

  }

  @Override

  public void handleMessage(Message msg) {

  switch (msg.what) {

  case DialogInterface.BUTTON_POSITIVE:

  case DialogInterface.BUTTON_NEGATIVE:

  case DialogInterface.BUTTON_NEUTRAL:

 ?。ǎ―ialogInterface.OnClickListener) msg.obj).onClick(mDialog.get(), msg.what);

  break;

  case MSG_DISMISS_DIALOG:

  ((DialogInterface) msg.obj).dismiss();

  }

  }

  }

  從上面代碼的最后可以找到

 ?。ǎ―ialogInterface) msg.obj).dismiss();。現在看了這么多源代碼,我們來總結一下對話框按鈕單擊事件的處理過程。在AlertController處理對話框按鈕時會為每一個按鈕添加一個onclick事件。而這個事件類的對象實例就是上面的mButtonHandler。在這個單擊事件中首先會通過發送消息的方式調用為按鈕設置的單擊事件(也就是通過setPositiveButton等方法的第二個參數設置的單擊事件),在觸發完按鈕的單擊事件后,會通過發送消息的方式調用dismiss方法來關閉對話框。而在AlertController類中定義了一個全局的mHandler變量。在AlertController類中通過ButtonHandler類來對象來為mHandler賦值。因此,我們只要使用我們自己Handler對象替換ButtonHandler就可以阻止調用dismiss方法來關閉對話框。下面先在自己的程序中建立一個新的ButtonHandler類(也可叫其他的名)。

  class ButtonHandler extends Handler

  {

  private WeakReference《DialogInterface》 mDialog;

  public ButtonHandler(DialogInterface dialog)

  {

  mDialog = new WeakReference《DialogInterface》(dialog);

  }

  @Override

  public

  void handleMessage(Message msg)

  {

  switch (msg.what)

  {

  case DialogInterface.BUTTON_POSITIVE:

  case DialogInterface.BUTTON_NEGATIVE:

  case DialogInterface.BUTTON_NEUTRAL:

 ?。ǎ―ialogInterface.OnClickListener) msg.obj).onClick(mDialog

  .get(), msg.what);

  break;

  }

  }

  }

  我們可以看到,上面的類和AlertController中的ButtonHandler類很像,只是支掉了switch語句的最后一個case子句(用于調用dismiss方法)和相關的代碼。

  眾所周知,AlertDialog類對于顯示對話。關于AlertDialog的基本用法在這里就不詳細介紹了,網上有很多,讀者可以自己搜索。那么本文要介紹的是如何隨心所欲地控制AlertDialog。

  現在我們來看看第一個需求:如果某個應用需要彈出一個對話框。當單擊“確定“按鈕時完成某些工作,如果這些工作失敗,對話框不能關閉。而當成功完成工作后,則關閉對話框。當然,無論何程度情況,單擊“取消”按鈕都會關閉對話框。

  這個需求并不復雜,也并不過分(雖然我們可以自己弄個Activity來完成這個工作,也可在View上自己放按鈕,但這顯示有些大炮打蚊子了,如果對話框上只有一行文本,費這么多勁太不值了)。但使用過AlertDialog的讀者都知道,無論單擊的哪個按鈕,無論按鈕單擊事件的執行情況如何,對話框是肯定要關閉的。也就是說,用戶無法控制對話框的關閉動作。實際上,關閉對話框的動作已經在Android SDK寫死了,并且未給使用者留有任何接口。但我的座右銘是“宇宙中沒有什么是不能控制的”。

  既然要控制對放框的關閉行為,首先就得分析是哪些類、哪些代碼使這個對話框關閉的。進入AlertDialog類的源代碼。在AlertDialog中只定義了一個變量:mAlert。這個變量是AlertController類型。AlertController類是Android的內部類,在com.android.internal.app包中,無法通過普通的方式訪問。也無法在Eclipse中通過按Ctrl鍵跟蹤進源代碼。但可以直接在Android源代碼中找到AlertController.java。我們再回到AlertDialog類中。AlertDialog類實際上只是一個架子。象設置按鈕、設置標題等工作都是由AlertController類完成的。因此,AlertController類才是關鍵。

  找到AlertController.java文件。打開后不要感到頭暈哦,這個文件中的代碼是很多地。不過這么多代碼對本文的主題也沒什么用處。下面就找一下控制按鈕的代碼。

  在AlertController類的開頭就會看到如下的代碼:

  View.OnClickListener mButtonHandler = new View.OnClickListener() {

  public void onClick(View v) {

  Message m = null;

  if (v == mButtonPositive && mButtonPositiveMessage != null) {

  m = Message.obtain(mButtonPositiveMessage);

  } else if (v == mButtonNegative && mButtonNegativeMessage != null) {

  m = Message.obtain(mButtonNegativeMessage);

  } else if (v == mButtonNeutral && mButtonNeutralMessage != null) {

  m = Message.obtain(mButtonNeutralMessage);

  }

  if (m != null) {

  m.sendToTarget();

  }

  // Post a message so we dismiss after the above handlers are executed

  mHandler.obtainMessage(ButtonHandler.MSG_DISMISS_DIALOG, mDialogInterface)

  .sendToTarget();

  }

  };

  從這段代碼中可以猜出來,前幾行代碼用來觸發對話框中的三個按鈕(Positive、Negative和Neutral)的單擊事件,而最后的代碼則用來關閉對話框(因為我們發現了MSG_DISMISS_DIALOG、猜出來的)。

  mHandler.obtainMessage(ButtonHandler.MSG_DISMISS_DIALOG, mDialogInterface)

  .sendToTarget();

  上面的代碼并不是直接來關閉對話框的,而是通過一個Handler來處理,代碼如下:

  private static final class ButtonHandler extends Handler {

  // Button clicks have Message.what as the BUTTON{1,2,3} constant

  private static final int MSG_DISMISS_DIALOG = 1;

  private WeakReference《DialogInterface》 mDialog;

  public ButtonHandler(DialogInterface dialog) {

  mDialog = new WeakReference《DialogInterface》(dialog);

  }

  @Override

  public void handleMessage(Message msg) {

  switch (msg.what) {

  case DialogInterface.BUTTON_POSITIVE:

  case DialogInterface.BUTTON_NEGATIVE:

  case DialogInterface.BUTTON_NEUTRAL:

 ?。ǎ―ialogInterface.OnClickListener) msg.obj).onClick(mDialog.get(), msg.what);

  break;

  case MSG_DISMISS_DIALOG:

 ?。ǎ―ialogInterface) msg.obj).dismiss();

  }

  }

  }

  從上面代碼的最后可以找到

 ?。ǎ―ialogInterface) msg.obj).dismiss();?,F在看了這么多源代碼,我們來總結一下對話框按鈕單擊事件的處理過程。在AlertController處理對話框按鈕時會為每一個按鈕添加一個onclick事件。而這個事件類的對象實例就是上面的mButtonHandler。在這個單擊事件中首先會通過發送消息的方式調用為按鈕設置的單擊事件(也就是通過setPositiveButton等方法的第二個參數設置的單擊事件),在觸發完按鈕的單擊事件后,會通過發送消息的方式調用dismiss方法來關閉對話框。而在AlertController類中定義了一個全局的mHandler變量。在AlertController類中通過ButtonHandler類來對象來為mHandler賦值。因此,我們只要使用我們自己Handler對象替換ButtonHandler就可以阻止調用dismiss方法來關閉對話框。下面先在自己的程序中建立一個新的ButtonHandler類(也可叫其他的名)。

  class ButtonHandler extends Handler

  {

  private WeakReference《DialogInterface》 mDialog;

  public ButtonHandler(DialogInterface dialog)

  {

  mDialog = new WeakReference《DialogInterface》(dialog);

  }

  @Override

  public

  void handleMessage(Message msg)

  {

  switch (msg.what)

  {

  case DialogInterface.BUTTON_POSITIVE:

  case DialogInterface.BUTTON_NEGATIVE:

  case DialogInterface.BUTTON_NEUTRAL:

 ?。ǎ―ialogInterface.OnClickListener) msg.obj).onClick(mDialog

  .get(), msg.what);

  break;

  }

  }

  }

  我們可以看到,上面的類和AlertController中的ButtonHandler類很像,只是支掉了switch語句的最后一個case子句(用于調用dismiss方法)和相關的代碼。

  下面我們就要為AlertController中的mHandler重新賦值。由于mHandler是private變量,因此,在這里需要使用Java的反射技術來為mHandler賦值。由于在AlertDialog類中的mAlert變量同樣也是private,因此,也需要使用同樣的反射技術來獲得mAlert變量。代碼如下:

  先建立一個AlertDialog對象

  AlertDialog alertDialog = new AlertDialog.Builder(this)

  .setTitle(“abc”)

  .setMessage(“content”)

  .setIcon(R.drawable.icon)

  .setPositiveButton( “確定”,

  new OnClickListener()

  {

  @Override

  public void onClick(DialogInterface dialog,

  int which)

  {

  }

  }).setNegativeButton(“取消”, new OnClickListener()

  {

  @Override

  public void onClick(DialogInterface dialog, int which)

  {

  dialog.dismiss();

  }

  }).create();

  上面的對話框很普通,單擊哪個按鈕都會關閉對話框。下面在調用show方法之前來修改一個mHandler變量的值,OK,下面我們就來見證奇跡的時刻。

  try

  {

  Field field = alertDialog1.getClass().getDeclaredField(“mAlert”);

  field.setAccessible(true);

  //

  獲得mAlert變量的值

  Object obj = field.get(alertDialog1);

  field = obj.getClass().getDeclaredField(“mHandler”);

  field.setAccessible(true);

  //

  修改mHandler變量的值,使用新的ButtonHandler類

  field.set(obj, new ButtonHandler(alertDialog1));

  }

  catch (Exception e)

  {

  }

  //

  顯示對話框

  alertDialog.show();

  我們發現,如果加上try

  catch語句,單擊對話框中的確定按鈕不會關閉對話框(除非在代碼中調用dismiss方法),單擊取消按鈕則會關閉對話框(因為調用了dismiss方法)。如果去了try…catch代碼段,對話框又會恢復正常了。

  雖然上面的代碼已經解決了問題,但需要編寫的代碼仍然比較多,為此,我們也可采用另外一種方法來阻止關閉對話框。這種方法不需要定義任何的類。

  這種方法需要用點技巧。由于系統通過調用dismiss來關閉對話框,那么我們可以在dismiss方法上做點文章。在系統調用dismiss方法時會首先判斷對話框是否已經關閉,如果對話框已經關閉了,就會退出dismiss方法而不再繼續關閉對話框了。因此,我們可以欺騙一下系統,當調用dismiss方法時我們可以讓系統以為對話框已經關閉(雖然對話框還沒有關閉),這樣dismiss方法就失效了,這樣即使系統調用了dismiss方法也無法關閉對話框了。

  下面讓我們回到AlertDialog的源代碼中,再繼續跟蹤到AlertDialog的父類Dialog的源代碼中。找到dismissDialog方法。實際上,dismiss方法是通過dismissDialog方法來關閉對話框的,dismissDialog方法的代碼如下:

  private

  void dismissDialog() {

  if (mDecor == null) {

  if (Config.LOGV) Log.v(LOG_TAG,

  “[Dialog] dismiss: already dismissed, ignore”);

  return;

  }

  if (!mShowing) {

  if (Config.LOGV) Log.v(LOG_TAG,

  “[Dialog] dismiss: not showing, ignore”);

  return;

  }

  mWindowManager.removeView(mDecor);

  mDecor = null;

  mWindow.closeAllPanels();

  onStop();

  mShowing = false;

  sendDismissMessage();

  }

  該方法后面的代碼不用管它,先看if(!mShowing){…}這段代碼。這個mShowing變量就是判斷對話框是否已關閉的。因此,我們在代碼中通過設置這個變量就可以使系統認為對話框已經關閉,就不再繼續關閉對話框了。由于mShowing也是private變量,因此,也需要反射技術來設置這個變量。我們可以在對話框按鈕的單擊事件中設置mShowing,代碼如下:

  try

  {

  Field field = dialog.getClass()

  .getSuperclass().getDeclaredField(

  “mShowing”);

  field.setAccessible(true);

  //

  將mShowing變量設為false,表示對話框已關閉

  field.set(dialog, false);

  dialog.dismiss();

  }

  catch (Exception e)

  {

  }

  將上面的代碼加到哪個按鈕的單擊事件代碼中,哪個按鈕就再也無法關閉對話框了。如果要關閉對話框,只需再將mShowing設為true即可。要注意的是,在一個按鈕里設置了mShowing變量,也會影響另一個按鈕的關閉對話框功能,因此,需要在每一個按鈕的單擊事件里都設置mShowing變量的值。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          女仆av观看一区| 亚洲欧洲日夜超级视频| 国产婷婷色综合av蜜臀av| 国产精品国产馆在线真实露脸| 国产人成精品一区二区三| 欧美巨乳波霸| 在线观看福利一区| 欧美成人一品| 欧美亚洲综合另类| 欧美人妖在线观看| 亚洲国产成人av好男人在线观看| 欧美午夜精品久久久久免费视| 国产精品美女一区二区在线观看| 欧美在线视频免费| 久久久伊人欧美| 男人插女人欧美| 欧美日韩www| 久久av红桃一区二区小说| 在线电影欧美日韩一区二区私密| 亚洲高清毛片| 美女精品自拍一二三四| 亚洲欧美久久久久一区二区三区| 一色屋精品亚洲香蕉网站| 国产欧美日韩91| 亚洲电影免费观看高清完整版| 久久九九精品99国产精品| 国产精品麻豆欧美日韩ww| 久久av老司机精品网站导航| 韩曰欧美视频免费观看| 欧美国产91| 欧美va亚洲va日韩∨a综合色| 国产亚洲成av人在线观看导航| 狠狠88综合久久久久综合网| 欧美大片免费看| 国内不卡一区二区三区| 亚洲性感美女99在线| 久久人人97超碰国产公开结果| 久久精品国产第一区二区三区最新章节| 亚洲女人小视频在线观看| 亚洲国产高清aⅴ视频| 久久精品久久综合| 激情久久影院| 亚洲高清不卡在线| 亚洲电影中文字幕| 国产精品白丝av嫩草影院| 久久人体大胆视频| 一区精品久久| 日韩亚洲国产欧美| 欧美电影电视剧在线观看| 国产日韩欧美在线一区| 国内精品伊人久久久久av影院| 国产精品自拍小视频| 久久精品国产第一区二区三区最新章节| 亚洲激情av| 国产精品久久久久久久久果冻传媒| 欧美国产综合视频| 一区二区高清在线| 曰韩精品一区二区| 免费永久网站黄欧美| 欧美不卡在线| 国产日韩欧美电影在线观看| 黄色日韩在线| 欧美在线一级视频| 亚洲黄色影院| 国内一区二区在线视频观看| 欧美午夜激情视频| 久久综合色综合88| 一区二区三区四区五区在线| 欧美视频一区二区三区…| 久久激情一区| 久久一二三国产| 欧美日韩91| 亚洲伦理在线免费看| 在线观看日韩国产| 久久一区欧美| 亚洲精品视频啊美女在线直播| 欧美视频在线观看一区二区| 欧美午夜电影在线| 亚洲美女av电影| 国内精品写真在线观看| 国产亚洲精品久久久久婷婷瑜伽| 影音先锋亚洲一区| 欧美成人日本| 亚洲综合色网站| 国产精品jizz在线观看美国| 久久亚洲图片| 久久综合九色欧美综合狠狠| 国产一区 二区 三区一级| 欧美性理论片在线观看片免费| 欧美人与性动交a欧美精品| 欧美精品久久久久久久久久| 国内精品国语自产拍在线观看| 国产精品毛片a∨一区二区三区|国| 在线成人h网| 亚洲福利电影| 欧美日韩午夜精品| 一本久道久久综合婷婷鲸鱼| 亚洲天天影视| 国产精品理论片| 欧美一区二区私人影院日本| 国产亚洲在线观看| 欧美日韩极品在线观看一区| 午夜免费在线观看精品视频| 亚洲欧洲日产国产综合网| 久久久久网站| 欧美777四色影视在线| 亚洲精品在线观| 亚洲一区二区三区精品视频| 欧美日韩伊人| 欧美日韩成人在线观看| 午夜视频一区| 久久在线视频| 国产亚洲福利| 中文高清一区| 久久精品一二三区| 一区二区三区高清在线| 欧美制服第一页| 亚洲国产一区二区a毛片| 欧美一级久久久久久久大片| 欧美综合第一页| 国产精品视频一二三| 国产精品99久久久久久www| 99re热这里只有精品免费视频| 老**午夜毛片一区二区三区| 久久精品国产第一区二区三区| 欧美一区综合| 国产精品羞羞答答| 国产拍揄自揄精品视频麻豆| 亚洲一区在线观看免费观看电影高清| 男人的天堂亚洲在线| 欧美激情在线播放| 免费欧美在线| 亚洲福利国产精品| 欧美伦理影院| 亚洲精品一区二区三区蜜桃久| 国产精品资源在线观看| 国产精品热久久久久夜色精品三区| 欧美日韩妖精视频| 这里是久久伊人| 免费91麻豆精品国产自产在线观看| 午夜精品福利在线观看| 亚洲国产精品国自产拍av秋霞| 午夜精品一区二区三区在线| 久久久久天天天天| 免费国产一区二区| 久久在线91| 日韩一区二区免费高清| 国产精品国产三级国产aⅴ无密码| 欧美三区在线| 欧美日韩国产美女| 一区二区三区久久久| 在线亚洲高清视频| 欧美日韩精品是欧美日韩精品| 欧美国产日韩亚洲一区| 蜜臀av在线播放一区二区三区| 欧美精品一区二区三区视频| 夜夜夜精品看看| 欧美日韩国产一区二区三区| 校园春色综合网| 99在线观看免费视频精品观看| 另类国产ts人妖高潮视频| 亚洲精选视频在线| 一区二区视频免费完整版观看| 欧美大片在线观看一区二区| 国产日韩在线视频| 精品成人在线观看| 亚洲欧美日本精品| 欧美本精品男人aⅴ天堂| 在线观看成人一级片| 国产精品久久久久久久久免费| 欧美永久精品| 欧美精品久久久久久久久老牛影院| 欧美区在线播放| 欧美国产另类| 最近中文字幕mv在线一区二区三区四区| 国产精品女主播在线观看| 国产精品久久久久久户外露出| 国产精品久久中文| 国产综合在线看| 亚洲高清不卡av| 亚洲视频欧美在线| 亚洲与欧洲av电影| 欧美大片国产精品| 国产亚洲毛片在线| 国产午夜精品在线观看| 国产精品网站在线观看| 久久国产精品一区二区三区四区| 久久中文欧美| 欧美女同视频| 日韩亚洲欧美成人| 99在线热播精品免费99热| 国产情侣久久| 亚洲三级影院| 亚洲淫性视频| 国产欧美日韩精品a在线观看| 韩国三级在线一区| 毛片av中文字幕一区二区| 午夜精品久久久久久久| 欧美mv日韩mv国产网站| 欧美日本韩国一区| 亚洲日本欧美天堂| 久久午夜国产精品| 亚洲宅男天堂在线观看无病毒| 久久精品国亚洲| 亚洲国产精品精华液网站| 久久精品成人一区二区三区蜜臀| 亚洲香蕉视频| 99热在线精品观看| 亚洲国产精品美女| 亚洲精品免费在线观看| 国产日韩欧美精品一区| 亚洲精品美女在线观看| 久久这里有精品15一区二区三区| 午夜精品影院在线观看| 免费欧美视频| 欧美在线综合| 在线观看日韩精品| 久久精品夜夜夜夜久久| 亚洲视频碰碰| 免费看的黄色欧美网站| 午夜精品免费在线| 激情视频一区二区三区| 激情国产一区二区| 玖玖玖免费嫩草在线影院一区| 午夜精品成人在线| 欧美国产精品专区| 欧美专区在线观看| 久久在线播放| 亚洲欧美国产一区二区三区| 激情六月婷婷综合| 亚洲视屏在线播放| 99人久久精品视频最新地址| 新片速递亚洲合集欧美合集| 最新国产の精品合集bt伙计| 欧美精品三级日韩久久| 午夜精品国产精品大乳美女| 国产精品对白刺激久久久| 激情五月综合色婷婷一区二区| 亚洲久色影视| 国产精品日本| 国产一区二区三区四区在线观看| 欧美理论在线播放| 欧美极品在线视频| 国产精品福利影院| 亚洲电影有码| 国产精品伦子伦免费视频| 亚洲日本在线观看| 久久久九九九九| 一区二区三区www| 欧美精品在线网站| 在线成人av.com| 久热精品视频在线| 在线精品在线| 先锋a资源在线看亚洲| 亚洲成人中文| 欧美黄网免费在线观看| 国产精品婷婷午夜在线观看| 国内成人精品视频| 欧美日韩一区二区视频在线| 老司机久久99久久精品播放免费| 欧美在线播放高清精品| 影音先锋久久| 女人香蕉久久**毛片精品| 一本色道久久综合狠狠躁篇的优点| 国产精品一二一区| 在线观看国产精品淫| 日韩亚洲国产精品| 久久久久久久久伊人| 中文亚洲字幕| 亚洲日本电影在线| 一区二区精品| 91久久久久久久久| 欧美午夜电影在线观看| 欧美三级免费| 鲁大师成人一区二区三区| 久久天天躁狠狠躁夜夜爽蜜月| 欧美日韩另类字幕中文| 免费亚洲视频| 欧美a级大片| 欧美日韩第一区日日骚| 黄网站色欧美视频| 国产原创一区二区| 欧美激情第4页| 免费久久精品视频| aa国产精品| 欧美亚洲成人精品| 国产精品国产三级国产| 亚洲精品免费在线观看| 欧美日本二区| 亚洲激情在线视频| 在线电影国产精品| 一区二区三区产品免费精品久久75| 欧美日韩国产欧| 亚洲无亚洲人成网站77777| 亚洲网站在线播放| 亚洲日产国产精品| 亚洲精选视频免费看| 老司机免费视频久久| 国产视频欧美视频| 欧美一区二区三区四区在线观看地址| 久久成人精品无人区| 亚洲精品婷婷| 国产精品啊啊啊| 欧美顶级艳妇交换群宴| 久久综合给合久久狠狠色| 一区二区三区在线观看欧美| 欧美性大战xxxxx久久久| 一本色道久久综合亚洲精品婷婷| 久久精彩免费视频| 亚洲欧美日韩在线高清直播| 国产视频久久网| 一区二区三区在线视频播放| 美国成人直播| 国产日韩一级二级三级| 精品动漫一区二区| 欧美激情免费在线| 亚洲第一级黄色片| 欧美一区二粉嫩精品国产一线天| 亚洲茄子视频| 麻豆视频一区二区| 亚洲精选一区| 亚洲一区欧美| 亚洲精品婷婷| 欧美不卡一区| 狠狠做深爱婷婷久久综合一区| 国产亚洲一区二区三区在线观看| 国产一区二区三区观看| 免费成人性网站|