日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

详细解读DialogFragment

發布時間:2023/12/19 综合教程 55 生活家
生活随笔 收集整理的這篇文章主要介紹了 详细解读DialogFragment 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

相信看這篇文章的人都應該知道android中的Dialog了吧,如果對于Dialog還不是很了解可以看我之前的一篇詳解文章:

Dialog詳解:http://www.cnblogs.com/tianzhijiexian/p/3867731.html

隨著Fragment這個類的引入,Google官方推薦大家使用DialogFragment來代替傳統的Dialog,那么是不是說我們之前學習的Dialog知識都沒有用處了呢?非也,新的fragment是來方便大家更好的管理和重用Dialog,之前的知識其實都是可以拿來就用的,僅僅需要少許的改變。

一、Dialog和DialogFragment的區別和優劣

新來的DialogFragment讓dialog也變成了碎片,相比之前來說應該做了很多優化和處理,對于程序員來看對話框現在更加具體了,就是一個activity上的一個fragment,我們也可以用fragment的知識來管理對話框了。

我們看看之前是怎么運用對話框對象的

  AlertDialog dialog = new AlertDialog.Builder(this)
        .setTitle("Dialog")
        .setMessage("thisis a dialog")
        .show();

如果這個時候屏幕方向發生變化,就會導致Activity重建,然后之前顯示的對話框就不見了。查看log可以發現這個錯誤:

04-1917:30:06.999: E/WindowManager(14495): Activitycom.example.androidtest.MainActivity has leaked windowcom.android.internal.policy.impl.PhoneWindow$DecorView{42ca3c18 V.E.....R....... 0,0-1026,414} that was originally added here

當然我們也可以無視這個錯誤,因為程序不會因此崩潰(看來android本身就已經預料到這種情況了)。

如果我們想要在旋轉屏幕的時候也能保證這個對話框顯示就需要做一定的處理了,在activity要銷毀前設立一個標志,看這時對話框是否是顯示狀態,如果是那么activity在下次建立時直接顯示對話框。

在onSaveInstanceState中

@Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        if (dialog != null && dialog.isShowing()) {
            outState.putBoolean("DIALOG_SHOWN", true);
        }
    }

在onCreat中

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        
        if (savedInstanceState != null) {
            boolean isShown = savedInstanceState.getBoolean("DIALOG_SHOWN");
            if (isShown) {
                AlertDialog dialog = new AlertDialog.Builder(this).setTitle("Dialog")
                        .setMessage("thisis a dialog").show();
            }
        }
    ……
}

使用DialogFragment來管理對話框就不會有這種問題了,代碼也少了很多的邏輯處理。當你旋轉屏幕的時候,fragmentManager會自定管理DialogFragment的生命周期,如果當前已經顯示在屏幕上了,那么旋轉屏幕后夜會自動顯示,下面就是在屏幕旋轉時的log輸出。

4-1917:45:41.289: D/==========(16156): MyDialogFragment : onAttach

04-1917:45:41.299: D/==========(16156): MyDialogFragment : onCreate

04-1917:45:41.299: D/==========(16156): MyDialogFragment : onCreateView

04-1917:45:41.309: D/==========(16156): MyDialogFragment : onStart

04-1917:45:50.619: D/==========(16156): MyDialogFragment : onStop

04-1917:45:50.619: D/==========(16156): third activity on destroy

04-1917:45:50.619:D/==========(16156): MyDialogFragment : onDestroyView

04-1917:45:50.619: D/==========(16156): MyDialogFragment : onDetach

04-1917:45:50.639: D/==========(16156): MyDialogFragment : onAttach

04-1917:45:50.639: D/==========(16156): MyDialogFragment : onCreate

04-1917:45:50.659: D/==========(16156): MyDialogFragment : onCreateView

04-1917:45:50.659: D/==========(16156): MyDialogFragment : onStart

Ok,當然你可以不以為然,你說我的應用就是豎著用的,旋轉屏幕畢竟是小概率事件,誰會開著對話框旋轉來旋轉去啊。那么相信下面的好處你一定不能否定吧。

我們之前用Dialog的時候,在activity中必須要建立這個對象,而且一般我們都是需要給它放監聽器的,比如下面的代碼:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.guid_main);new AlertDialog.Builder(GuideActivity.this).setTitle("用戶申明")
        .setMessage(getResources().getString(R.string.statement))
        .setPositiveButton("我同意", new positiveListener())
        .setNegativeButton("不同意", new negativeListener())
        .setCancelable(false)
        .show();
    }private class positiveListener implements DialogInterface.OnClickListener {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            prefs.setIsFirstTime(false);
        }
    }
    
    private class negativeListener implements DialogInterface.OnClickListener {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Util.virtualHome(GuideActivity.this);
        }
    }

你會發現這么長的代碼很破壞activity中的邏輯性,有木有!!!在activity中我們處理的各種控件的顯示和邏輯,但對于dialog這種不屬于activity并且建立和處理邏輯都自成一體的東西,我們為什么要在activity中建立呢?而且為了方便重用,我們在實際過程中基本都會建立一個dialog的工具類來做處理,所以為什么不用DialogFragment來實現呢?如果通過它來實現,我們就能很方便的進行管理對話框。

此外,當旋轉屏幕和按下后退鍵時可以更好的管理其聲明周期,它和Fragment有著基本一致的聲明周期。且DialogFragment也允許開發者把Dialog作為內嵌的組件進行重用,類似Fragment(可以在大屏幕和小屏幕顯示出不同的效果)。有可能我們在大屏幕上就不需要彈出一個對話框了,直接內嵌在activity界面中顯示即可。這點也很贊!

二、DialogFragment的最簡單用法

使用DialogFragment很簡單,甚至比用Fragment還簡單,因為在api中已經實現了fragment切換對象了。

1.建立一個fragment對象

package com.kale.dialogfragmenttest;

import android.app.DialogFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MyDialogFragment extends DialogFragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        System.out.println("tag = "+getTag()); // tag which is from acitivity which started this fragment

        return inflater.inflate(R.layout.dialog, null);
    }
}

我們建立了一個fragment,讓他繼承了DialogFragment,在onCreatView中通過布局文件建立了一個view,這和fragment完全一致。

布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:padding="16dp">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <EditText
        android:layout_marginTop="10dp"
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10">
        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_marginTop="10dp"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

View Code

2.在activity中啟用這個dialog

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        new DialogFragmentTest()
        .show(getFragmentManager(), "dialog_fragment");
    }

很像Dialog吧,也是支持鏈式編程的。這里面的參數:① 一個fragmentManager,在低版本中用getSupport來獲取;② 一個tag(String)通過這個tag可以告訴fragment是誰啟動了它,當然這僅僅是這個tag的一種使用方式啦。在fragment中可以通過getTag()方法來獲取這個tag

這里多說一句,在一年前我還一直說要兼容要兼容,不兼容的demo是很不負責任的,但是現在來看,低版本的用戶真的很少很少了,而且這些低版本的用戶已經不能是我們的主流用戶了,所以在2014年末,我可以負責任的說,可以不用兼容2.x的系統了。我之前寫過很多兼容的文章,actionbar啊,對話框的兼容啊,但現在都變得無所謂了,其實任何事物的發展都是如此。很多之前很重要的技術,在新的發展中已經慢慢變得無足輕重了,但我們之前為之付出的東西卻不是無價值的。一個原因是為自己之前的工作找到價值,一種是在那段時光中我們慢慢體會到了很多東西,這些東西就是我們的閱歷也是一種談資。

好,閑話少敘,下面是運行效果:

有人會說,上面的那個空白的title好丑,我想去掉。當然可以,這就是fragment的好處,用這個方法:

getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);

public class MyDialogFragment extends DialogFragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        System.out.println("tag = "+getTag());
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        return inflater.inflate(R.layout.dialog, null);
    }
}

現在它變成了這個樣子:

所以你可以看到,任何改變都是要付出代價的,如果你還是像之前一樣用match_parent來制定控件的寬度,那么就是這種結果。可以說那個title欄就是一個房梁,支撐著對話框的寬度,沒了它就只能自適應了。解決辦法就是自定義控件的寬度,寫個幾百dp啥的,沒任何技術難度。

注意:

如果你的DialogFragment是Activity的內部類,必須將DialogFragment定義為靜態的。否則會報錯!!!

    public static class DialogFragmentTest extends DialogFragment {

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // TODO 自動生成的方法存根
            return inflater.inflate(R.layout.dialog, null);
        }
    }

三、DialogFragment啟動、終止過程分析

之前說了,我們沒有像fragment那樣建立一個fragment加載對象進行fragment的加載,也沒有commit,但卻能使用dialogFragment對象,這是為什么呢?

我們先來回顧下fragment是怎么使用的。

① 建立FragmentManager對象,用來管理fragment

② 建立fragmentTransaction對象,用來添加和fragment

③ 提交fragment切換(commit)

    FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction ft = fragmentManager.beginTransaction();  
    
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.add(R.id.container_fragment, new MyFragment())
        .commit();

替換fragment的方法

  getSupportFragmentManager().beginTransaction().
        replace(R.id.container_fragment02, fragment)
        .addToBackStack(null)
        .commit();

現在,我們通過源碼來分析下DialogFragment的啟動方式

我們在使用它的時候沒有去用fragmentTransaction對象,也沒有執行add,也沒有執行commit,僅僅提供了一個fragmentManager,那么它是怎么被添加的呢?我們知道這個對話框是用show方法顯示的,那么就來看看這個方法吧。

DialogFragment源碼:

1. show()

    public void show(FragmentManager manager, String tag){
        mDismissed = false; 
        mShownByMe = true; 
        FragmentTransaction ft = manager.beginTransaction(); // creat a fragmentTransaction
        ft.add(this, tag); // add fragment with tag
        ft.commit(); 
    } 

真相大白,api自動給你實現了一個fragment切換的對象,而且在show的時候就已經add了fragment,所以沒有任何問題~

在add方法中沒有提供容器的id,所以表示是加載到當前activity中的,在添加后也的確調用了commit方法

2. show()的另一種形式

    public int show(FragmentTransaction transaction, String tag) {
        mDismissed = false; 
        mShownByMe = true; 
        transaction.add(this, tag); 
        mViewDestroyed = false; 
        mBackStackId = transaction.commit();
        return mBackStackId; 
    }  

上面的show方法傳入的是一個fragmentTransaction對象,這個也很容易理解。我們之前傳入fragmentManager對象的目的就是生成這個fragmentTransaction對象,這回我們可以在傳入一個已經配置好的fragmentTransaction對象,大大增加了可定制性。所以api的制訂也是大神們心血的結晶啊。

3.dimiss()

源碼:

** 
 * Dismiss the fragment and its dialog.  If the fragment was added to the 
 * back stack, all back stack state up to and including this entry will 
 * be popped.  Otherwise, a new transaction will be committed to remove 
 * the fragment. 
 */  
public void dismiss() {  
    dismissInternal(false);  
}  
  
void dismissInternal(boolean allowStateLoss) {  
    if (mDismissed) {  
        return;  
    }  
    mDismissed = true;  
    mShownByMe = false;  
    if (mDialog != null) {  
        mDialog.dismiss();  
        mDialog = null;  
    }  
    mViewDestroyed = true;  
    if (mBackStackId >= 0) {  
        getFragmentManager().popBackStack(mBackStackId,  
                FragmentManager.POP_BACK_STACK_INCLUSIVE);  
        mBackStackId = -1;  
    } else {  
        FragmentTransaction ft = getFragmentManager().beginTransaction();  
        ft.remove(this);   
        if (allowStateLoss) {  
            ft.commitAllowingStateLoss();  
        } else {  
            ft.commit();  
        }  
    }  
}  

我們知道了如果一個DialogFragment關閉的時候會檢查堆棧里面有沒有其他的對象,如果有就pop出來,如果沒有就直接remove和commit。也就是說:如果back stack堆棧有該Dialog,將其pop出來,否則ft.remove(this); ft.commit();。估計pop的操作也包含ft.remove()和ft.commit()。調用dismiss()會觸發onDismiss()回調函數。

跟蹤狀態,如下:

四、通過onCreateView()來建立對話框布局

上面的例子中我們已經在onCreateView()建立的對話框布局,這時fragment中建立布局的傳統寫法,很適合用于自定義的對話框,我們可以修改任何的東西,包括對話框的style。上面的例子中我們已經干掉了對話框上面title的區域,而我們也沒發現可以設置標題的方法,感覺上面那個標題欄就是個標題黨,毫無意義(之后會說到這塊區域的用處)。

我們在onCreat中可以設置對話框的風格和各種屬性,但是千萬別設置關于view的東西,因為這時候對話框還沒建立呢,有關于view的東西在onCreatView中去設置吧,這里我簡單設置了一個button的點擊事件——關閉對話框

public class MyDialogFragment extends DialogFragment{

    @Override 
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState); 
        //如果setCancelable()中參數為true,若點擊dialog覆蓋不到的activity的空白或者按返回鍵,
        //則進行cancel,狀態檢測依次onCancel()和onDismiss()。如參數為false,則按空白處或返回鍵無反應。缺省為true 
        setCancelable(true); 
        //可以設置dialog的顯示風格
        //setStyle(style,theme);  
    }  
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        //getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        View rootView = inflater.inflate(R.layout.dialog, null);
        Button btn = (Button)rootView.findViewById(R.id.button);
        btn.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO 自動生成的方法存根
                dismiss();
            }
        });
        return rootView;
    }

}

補充:實現信息保存

在activity橫豎屏切換的時候,dialog現在可以自動重建了,如果你在editText中輸入了信息,在重建的時候會不會保留之前的呢?在4.2和4.4中對話框人性化的自定保存了之前輸入的內容,我們無須手動處理。但如果你測試的手機被奇葩的定制了,那就乖乖的保存數據吧。

public class MyDialogFragment extends DialogFragment {

    EditText editText;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.dialog, null);

        editText = (EditText) rootView.findViewById(R.id.editText);
        if (savedInstanceState != null) {
            CharSequence text = savedInstanceState.getCharSequence("input data");
            editText.setText(text == null ? "" : text);
        }
        return rootView;
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putCharSequence("input data", editText.getText());
        super.onSaveInstanceState(outState);
    }

}

五、通過onCreateDialog()來快捷的建立對話框

我們上面建立的對話框都是用自定義布局的,難道我們之前學過的dialog知識都沒用了么?我們如果沒自定義對話框的需求,怎么辦?就沒有一種快一點的方式來建立對話框么?快用onCreatDialog吧!!!這個回調方法是DialogFragment獨有的,通過它返回的是一個Dialog對象,這個對象就會被顯示到屏幕上。千萬別同時使用onCreatView和onCreatDialog方法,他們僅僅是為了完成同樣一個目的的兩條路而已。

PS:從生命周期的順序而言,先執行onCreateDialog(),后執行onCreateView()

我在onCreatDialog建立一個警告對話框的builder,通過這個builder的create()方法來生成一個AlertDialog對象,因為AlertDialog是Dialog的子類,所以可以直接返回給Dialog。這里可以用其他不同對話框的builder,代碼類似,只不過就是通過builder的creat()方法返回的是不同的對象而已。builder模式也是蠻巧妙的~

public class MyDialogFragment extends DialogFragment implements android.content.DialogInterface.OnClickListener{
    
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("用戶申明")
            .setMessage(getResources().getString(R.string.hello_world))
            .setPositiveButton("我同意", this)
            .setNegativeButton("不同意", this)
            .setCancelable(false);
            //.show(); // show cann't be use here
        
        return builder.create();
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // TODO 自動生成的方法存根
    }
}

顯示效果:

看到了么,這里的標題欄終于有用了,原來那個標題欄是為了給我們在這里用的啊~

注意:

① 因為這里創建的是一個dialog,所以用的onclickListener自然是對話框中的listener了。

② 千萬別在構建對話框對象的時候順手寫了show()方法,我們現在是在fragment中初始化一個對話框,真正讓他顯示的時候是在activity中用這個dialogFragment對象顯示的。如果這里寫了show方法不會報錯,但是會出現兩個對話框!

那么,我們能不能在這里自定義對話框呢?當然可以啦,本身Dialog.builder就提供了自定義view的方法,和之前用Dialog一樣自定義下viwe就搞定了。

 @Override  
    public Dialog onCreateDialog(Bundle savedInstanceState)  
    {  
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());  
        // Get the layout inflater  
        LayoutInflater inflater = getActivity().getLayoutInflater();  
        View view = inflater.inflate(R.layout.fragment_login_dialog, null);  
        // Inflate and set the layout for the dialog  
        // Pass null as the parent view because its going in the dialog layout  
        builder.setView(view)  // set your own view
                // Add action buttons  
                .setPositiveButton("Sign in",  
                        new DialogInterface.OnClickListener()  
                        {  
                            @Override  
                            public void onClick(DialogInterface dialog, int id)  
                            {  
                            }  
                        }).setNegativeButton("Cancel", null);  
        return builder.create();  
    }  

這里貼下我在另一篇文章的自定義對話框view的代碼片段:

詳細看這里:http://www.cnblogs.com/tianzhijiexian/p/3867731.html

/**
     * 自定義視圖對話框
     * 
     * @param title
     */
    public void viewDialog(String title) {
        // LayoutInflater是用來找layout文件夾下的xml布局文件,并且實例化
        LayoutInflater factory = LayoutInflater.from(mContext);
        // 把activity_login中的控件定義在View中
        View view = factory.inflate(R.layout.dialog_layout, null);
        // 將LoginActivity中的控件顯示在對話框中

        // 獲取用戶輸入的“用戶名”,“密碼”
        // 注意:view.findViewById很重要,因為上面factory.inflate(R.layout.activity_login,
        // null)將頁面布局賦值給了view了
        TextView titleTv = (TextView) view
                .findViewById(R.id.dialog_textView_id);
        titleTv.setText(title);
        Button btn = (Button) view.findViewById(R.id.dialog_logout_button_id);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                showToast("按下自定義視圖的按鈕了~");
            }
        });

        builder
        // 設定顯示的View
        .setView(view);
        // 設置dialog是否為模態,false表示模態,true表示非模態
        // ab.setCancelable(false);
        // 對話框的創建、顯示,這里顯示的位置是在屏幕的最下面,但是很不推薦這個種做法,因為距底部有一段空隙
        AlertDialog dialog = builder.create();
        Window window = dialog.getWindow();
        window.setGravity(Gravity.BOTTOM); // 此處可以設置dialog顯示的位置
        window.setWindowAnimations(R.style.myAnimationstyle); // 添加動畫
        dialog.show();
    }

六、DialogFragment與Activity之前進行通信

思路很簡單,就是定義一個傳輸數據的接口,強制activity實現這個接口,在fragment需要傳遞數據的時候去調用這個接口的方法,activity就能在這個方法中得到相應的數據了。這點在之前的fragment傳遞數據中已經介紹過了,可以參考這篇文章:

http://www.cnblogs.com/tianzhijiexian/p/3888330.html

在真正項目中,fragment的編寫并不需要了解activity的各類方法,好的編程風格是將fragment所涉及的方法以接口的方式封裝起來,我在此寫一個例子來說明一下。

1. 寫一個接口——DataCallback

package com.kale.dialogfragmenttest;

public interface DataCallback {

    public void getData(String data);
}

2.activity實現這個接口

public class MainActivity extends Activity implements DataCallback{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        new MyDialogFragment()
        .show(getFragmentManager(), "dialog_fragment");
    }

    @Override
    public void getData(String data) {
        // TODO 自動生成的方法存根
        System.out.println("data = "+ data);
    }

}

3.在DialogFragment中使用這個接口,并且用instanceof來看啟動它的activity是否實現了這個接口,如果沒實現就拋出異常。這樣我們就能保證在大型項目中不會出現忘記實現這個接口的問題了。

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;

public class MyDialogFragment extends DialogFragment implements
        android.content.DialogInterface.OnClickListener {

    @Override
    public void onAttach(Activity activity) {
        // onAttach()是合適的早期階段進行檢查MyActivity是否真的實現了接口。
        // 采用接口的方式,dialog無需詳細了解MyActivity,只需了解其所需的接口函數,這是真正項目中應采用的方式。
        if (!(activity instanceof DataCallback)) {
            throw new IllegalStateException("fragment所在的Activity必須實現Callbacks接口");
        }
        super.onAttach(activity);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("用戶申明")
                .setMessage(getResources().getString(R.string.hello_world))
                .setPositiveButton("我同意", this).setNegativeButton("不同意", this)
                .setCancelable(false);
        // show();

        return builder.create();
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // TODO 自動生成的方法存根
        DataCallback callback = (DataCallback) getActivity();
        callback.getData("test");
    }

}

此外fragment也可以通過fragment管理器,通過tag,獲取其他fragment實例,從而進行fragment之間的通信。當然從編程思想的角度看,fragment之間的過多進行交叉調用,不利于程序的管控。

七、用DialogFragment實現再次彈窗

有時候我們可能有這樣的需求,點擊對話框中的一個按鈕后又彈出一個對話框,這個該怎么做呢?首先在點擊事件中將這個對話框在屏幕上移除,然后把這個fragment壓棧,最后建立一個新的dialogFragment對象,show出來。我們雖然讓這個fragment在屏幕上消失,但還是可以通過fragment管理器到回退棧中找到它。

二次彈窗的代碼:

     FragmentTransaction ft = getFragmentManager().beginTransaction();

        /*
         * 如果不執行remove(),對話框即不會進入onDismiss()狀態。會被顯示在新的對話框下方,是可見的。
         * 主要考慮美觀的問題,如果下面的對話框大于上面的對話框就很難看了。 對于Dialog,container為0或者null。
         */
        ft.remove(this);
        /*
         * 將當前的PromptDialogFragment加入到回退堆棧,當用戶按返回鍵,或者通過按幫助框的Close按鈕dismiss幫助框是,
         * 重新顯示提示框。 對于back stack的處理,系統具有一定的智能。例如:執行兩次addToStackStack(),實際不會重復壓棧。
         * 有例如:注釋掉remove()語句,即提示框不消失,而是在幫助框的下面。
         * 但是在實驗中發現是否有addToBackStack()都不會結果有影響,系統能夠分析到對象存在,不需要壓棧。沒有去查源代碼,
         * 猜測通過mBackStackId比對來進行智能處理。
         */
        ft.addToBackStack(null);
        
        new OhterDialogFragment()
        .show(getFragmentManager(), "dialog_fragment");

八、利用Fragment的特性,為不同屏幕做適配

如果我們想在大屏幕上顯示對話框,而小屏幕中直接把對話框的內容放在activity中顯示呢?

其實也很簡單,本身這個dialogFragment就是一個fragment,所以完全有fragment的特性,你可以用fragmentTranscation將其放到任何布局中,你也可以用show()方法把它當作dialog顯示出來。接下來就剩下一個問題了,判斷屏幕大小。

在默認的values下新建一個bools.xml

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
    <bool name="large_layout">false</bool>  
</resources>  

然后,在res下新建一個values-large,在values-large下再新建一個bools.xml,通過加載不同的value就能知道是大屏還是小屏幕啦

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
    <bool name="large_layout">true</bool>  
</resources>  

在代碼中進行判斷

public void showDialogInDifferentScreen(View view)  
    {  
        FragmentManager fragmentManager = getFragmentManager();  
        EditNameDialogFragment newFragment = new EditNameDialogFragment();  
  
        boolean mIsLargeLayout = getResources().getBoolean(R.bool.large_layout) ;  
        Log.e("TAG", mIsLargeLayout+"");  
        if (mIsLargeLayout ) {  
            // The device is using a large layout, so show the fragment as a  
            // dialog  
            newFragment.show(fragmentManager, "dialog");  
        } else {  
            // The device is smaller, so show the fragment fullscreen  
            FragmentTransaction transaction = fragmentManager.beginTransaction();  
            // For a little polish, specify a transition animation  
            transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);  
            // To make it fullscreen, use the 'content' root view as the  
            // container for the fragment, which is always the root view for the activity  
            transaction.replace(R.id.id_ly, newFragment).commit();  
        }  
    }  

參考自:

http://blog.csdn.net/huangyabin001/article/details/30053835

http://blog.csdn.net/lmj623565791/article/details/37815413

總結

以上是生活随笔為你收集整理的详细解读DialogFragment的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

日韩在线视频免费播放 | 久久久精品久久日韩一区综合 | 精品国产一区二区三区久久久蜜臀 | 午夜精品久久久久久久99无限制 | 亚洲成av人片一区二区梦乃 | 我要看黄色一级片 | 日韩专区av | 亚洲精品日韩av | 日韩 精品 一区 国产 麻豆 | 亚洲久久视频 | 欧美精品久久 | 欧美日韩国产一二三区 | 色在线中文字幕 | 在线观看久久 | 美女视频网站久久 | 欧美va天堂va视频va在线 | 精品国产自在精品国产精野外直播 | www.天天色.com| 国产精品大全 | 国产亚洲精品精品精品 | 国产麻豆视频免费观看 | 少妇18xxxx性xxxx片 | 麻豆一区二区三区视频 | 成人久久毛片 | 欧美日韩中文国产 | 丁香六月伊人 | 中文字幕第一 | 婷婷色综合 | 欧美在线视频二区 | 91亚洲欧美 | 欧美影院久久 | 亚洲免费精品一区二区 | 菠萝菠萝蜜在线播放 | 久久精品网站免费观看 | a久久免费视频 | 最新真实国产在线视频 | 亚洲精品tv久久久久久久久久 | 在线视频久久 | 天天爱天天 | 亚洲精品永久免费视频 | 成人影片在线播放 | 国产无遮挡又黄又爽馒头漫画 | 色婷婷国产精品一区在线观看 | 久久久久久影视 | 久草97| 亚洲国产人午在线一二区 | 亚洲精品日韩一区二区电影 | 久久综合久久久久88 | 欧美日韩精品二区第二页 | 免费看国产曰批40分钟 | 夜夜操狠狠操 | 日韩欧美在线综合网 | 国产精品美女久久久久久2018 | 91人人在线 | 免费欧美精品 | 国产手机在线视频 | 91久久精品一区二区二区 | 国产精品视频专区 | 一区二区三区韩国免费中文网站 | 免费av黄色 | 国产麻豆剧果冻传媒视频播放量 | 香蕉视频在线网站 | 天天综合网久久综合网 | 久久久午夜精品福利内容 | 992tv在线观看网站 | 成年人看片 | 久久激情综合 | 亚洲一级电影视频 | 久久久精品国产免费观看同学 | 欧美性色网站 | 国产精品久久中文字幕 | 久久国产精品99国产 | 午夜精品一区二区三区在线视频 | 在线视频成人 | 天天色天天骑天天射 | 欧美精品做受xxx性少妇 | 91亚色在线观看 | 国产伦理久久精品久久久久_ | 69欧美视频 | 成人午夜av电影 | 在线精品视频在线观看高清 | 91亚洲欧美激情 | 少妇精品久久久一区二区免费 | 亚洲视频在线播放 | 久久久久久久久久久久久9999 | 97超碰人人爱| 色先锋资源网 | 成人丁香花 | 一个色综合网站 | 免费看毛片在线 | 久草在线看片 | 97精品国产一二三产区 | 欧美一二区视频 | 久久久久免费精品视频 | 成人国产精品久久久久久亚洲 | 亚洲精品欧美精品 | 欧美激情精品久久久久久免费印度 | 亚洲免费在线看 | 色狠狠综合天天综合综合 | 国产伦理久久精品久久久久_ | 久九视频 | 天天操夜操 | 99久久婷婷国产综合精品 | 美女免费网视频 | 91精品国产自产在线观看 | 成人小视频在线观看免费 | 久久情侣偷拍 | 精品亚洲免费 | 国产欧美精品一区二区三区 | 婷婷丁香色 | 日韩免费精品 | 国产黄色理论片 | 国产精品网址在线观看 | 国产生活一级片 | 日韩国产精品久久久久久亚洲 | 久久99精品久久久久久清纯直播 | 精品女同一区二区三区在线观看 | 成人黄色大片在线免费观看 | 久久久久观看 | 国产综合激情 | 免费在线看v | 欧美精品第一 | 婷婷色中文字幕 | 国产精品欧美日韩在线观看 | 美女网站视频色 | 97av影院| 日韩中文在线字幕 | 欧美aaa一级 | 国产一区二区久久久 | 91亚洲在线观看 | 欧美成人久久 | 免费三及片 | 婷婷色综 | 五月婷婷开心 | 最近久乱中文字幕 | 日本久久免费视频 | 五月婷综合 | 国产成免费视频 | 91丨九色丨高潮 | 日日干网址| 亚洲黄色在线播放 | 91在线看免费 | 欧美激情精品 | 人人爽人人爽av | 免费毛片一区二区三区久久久 | 国产精品va在线观看入 | 欧美一区三区四区 | 久久欧美综合 | 久久大视频 | 一区二区三区四区精品 | 黄色一级大片在线观看 | 日韩av免费观看网站 | 久在线| 日本韩国精品在线 | 天天做天天爽 | 中文字幕第一页在线 | 日本中文字幕在线视频 | 在线精品一区二区 | 一区二区 久久 | 一区二区精 | 九九免费在线视频 | 国产精品久久久久久影院 | 亚洲国产中文字幕在线观看 | 狠狠色丁香九九婷婷综合五月 | 男女精品久久 | 久久99久久99免费视频 | 四虎成人网 | 精品99免费 | 日韩在线大片 | 成人国产精品一区 | 天堂网一区二区三区 | 午夜久久精品 | 99热这里只有精品8 久久综合毛片 | 国产亚洲精品美女 | 日韩一区二区三区免费视频 | 亚洲伦理中文字幕 | 亚洲精品av在线 | 国产精品久久久久9999 | 国产色拍拍拍拍在线精品 | 91av免费观看 | 97精品国产一二三产区 | 97电影手机版 | 国产精品精品久久久久久 | 免费在线成人av电影 | 久久国产精品色av免费看 | 精品黄色在线观看 | 国产精品99蜜臀久久不卡二区 | 国产精品s色| 在线观看精品一区 | 久久免费视屏 | 九九在线精品视频 | 欧洲色吧| 91精品免费在线 | 91av网址| 天天操天天添天天吹 | h视频在线看 | 97人人射| 成人毛片a | 久久综合色综合88 | 国产免费av一区二区三区 | 深爱激情五月婷婷 | 久久视频99| 91大神在线看 | 麻豆国产精品va在线观看不卡 | 日本精品二区 | 天天婷婷| 精品久久久久一区二区国产 | 在线观看视频黄 | 黄色看片 | 久久中文字幕视频 | 日韩久久一区 | 9999精品 | 狠狠色免费 | 成年人毛片在线观看 | www.亚洲精品视频 | 精品免费99久久 | 国产免费人成xvideos视频 | 狠狠操狠狠插 | 美女福利视频一区二区 | 精品久久久免费视频 | 久久精品免费观看 | 亚洲va韩国va欧美va精四季 | 国内精品久久久久久久久久久 | 91女子私密保健养生少妇 | 91免费视频国产 | 97在线视频观看 | 色婷婷综合久久久久中文字幕1 | 日韩精品在线免费播放 | 欧美国产日韩一区二区三区 | 欧美日韩国产精品一区二区 | 美女黄久久| 亚洲人在线 | 欧美一级黄色片 | www.色午夜| 欧美日韩视频在线播放 | 最新超碰| 日本中文字幕免费观看 | 色综合色综合久久综合频道88 | 天天草av| 天天色官网 | 丁香五月亚洲综合在线 | 国产精品免费在线播放 | 久久久久久久国产精品 | 亚洲综合成人专区片 | 五月天丁香 | 久草在线在线精品观看 | 99国产成+人+综合+亚洲 欧美 | 天天爽天天爽夜夜爽 | 午夜精品一区二区三区在线播放 | 亚洲欧美国产精品va在线观看 | 91免费版在线观看 | av在线免费在线观看 | 亚洲天天综合 | 99久久精品午夜一区二区小说 | 日韩欧美在线视频一区二区三区 | 亚洲成人av影片 | 国产精品久久久av | 国产成人一区二区三区影院在线 | 欧美性精品 | 日本福利视频在线 | 日韩色高清 | 国产又粗又猛又色 | 中文字幕一区在线观看视频 | 婷婷六月中文字幕 | 伊人婷婷久久 | 在线 日韩 av | 中文字幕在线免费观看视频 | 国产精品久久久久毛片大屁完整版 | 蜜桃视频在线视频 | 狠狠操狠狠干天天操 | 中文字幕免费久久 | 成人av地址| av最新资源| 国产 欧美 日产久久 | 丁香六月综合网 | 久久久视屏 | 日韩aa视频 | 欧美日韩精品在线观看视频 | 中文字幕在线视频一区 | 日韩三级免费观看 | 91精品久久久久久粉嫩 | 视频三区 | 国产在线免费观看 | 亚洲激精日韩激精欧美精品 | 狠狠色丁香婷婷综合最新地址 | 国内外成人免费在线视频 | 免费日韩 精品中文字幕视频在线 | 91污在线 | 99精品区 | 五月婷色 | 美女久久久久久久 | 久久亚洲私人国产精品va | 亚洲欧美日韩国产精品一区午夜 | 国产剧情久久 | 久草网站在线 | 久久综合五月天婷婷伊人 | 1000部国产精品成人观看 | 午夜私人影院久久久久 | 国产成人精品一区二区三区福利 | 6080yy午夜一二三区久久 | 国产精品综合久久久久久 | 亚洲资源在线观看 | 日韩精品免费一区二区三区 | 精品一区av | 国产一区二区在线观看视频 | 久久在线视频精品 | 亚洲精品黄色在线观看 | 欧美在线视频一区二区 | 国产精品网红直播 | 亚洲va在线va天堂va偷拍 | 综合色中文 | 在线国产中文字幕 | 亚洲另类xxxx | 天天射天天射天天射 | 最近乱久中文字幕 | 黄色一级网 | 在线视频 成人 | 欧美成年人在线观看 | 日韩av一区在线观看 | 久久黄色网页 | 免费在线黄网 | sm免费xx网站 | 国产无限资源在线观看 | 国产 欧美 日韩 | 92中文资源在线 | 成人亚洲综合 | 操久久免费视频 | 日韩在线大片 | 日韩精品影视 | 中文字幕视频三区 | 超碰在线色 | 国产成人久 | 国产日韩欧美视频 | 三级av小说| 日本动漫做毛片一区二区 | 国产精品国产三级国产aⅴ9色 | 国产手机av| 成 人 黄 色 免费播放 | 嫩草av影院 | 久久公开免费视频 | 日韩视频中文字幕在线观看 | 久久不见久久见免费影院 | 九九日九九操 | 国产黄色成人av | 久久99精品久久久久婷婷 | 中文字幕中文字幕中文字幕 | 狠狠色狠狠综合久久 | 亚洲欧美国产精品 | 免费看的黄色 | 99热这里只有精品8 久久综合毛片 | 玖草在线观看 | 美女视频黄免费的 | 久久久久久久久久久成人 | 日韩三级中文字幕 | 亚洲aⅴ久久精品 | 国产成人免费在线 | 久久av在线 | 国产黄在线 | 中文字幕免费 | 日韩三级在线 | 狠狠的日| 18性欧美xxxⅹ性满足 | www.看片网站 | www色av| 亚洲一级在线观看 | 国产69精品久久99不卡的观看体验 | 欧美日韩国产页 | 日韩电影精品一区 | 91免费视频网站在线观看 | 狠狠操狠狠干天天操 | 国产精品11 | 日本激情中文字幕 | 日韩欧美在线一区二区 | 日韩av成人在线 | 欧美 国产 视频 | 在线观看一二三区 | 2019精品手机国产品在线 | 麻豆传媒视频在线 | 亚洲人成影院在线 | 2022中文字幕在线观看 | 92国产精品久久久久首页 | 国语自产偷拍精品视频偷 | 亚洲欧美日本国产 | 久草久草在线 | 国产亚洲情侣一区二区无 | 国产日韩欧美在线一区 | 久久香蕉电影网 | 97精品超碰一区二区三区 | 国产黄a三级三级 | 久久久久久久久久网站 | 久久久久久美女 | 高清国产在线一区 | 国产精品乱码在线 | 亚洲自拍av在线 | 99一级片 | 玖玖玖国产精品 | 波多野结衣综合网 | 日本二区三区在线 | 最新国产一区二区三区 | 免费观看的黄色 | 一区二区三区高清不卡 | 九九九九精品九九九九 | 中文字幕在线播放日韩 | 国产成人av福利 | 久久狠狠一本精品综合网 | 日韩高清无线码2023 | 成人一区二区三区在线 | 国内小视频 | 97国产人人 | 久免费 | 日韩一区正在播放 | 日本特黄一级片 | 国产精品高清免费在线观看 | 欧美精品在线视频观看 | 国产一级电影在线 | 黄色成人影视 | 一级成人在线 | 国产精品久久久久久一区二区三区 | 日韩av影视在线观看 | 欧美一级日韩三级 | 在线91播放 | 久草在线国产 | 在线免费成人 | 精品久久国产一区 | 午夜精品久久一牛影视 | 天天操人人要 | 久久毛片高清国产 | 伊人久久五月天 | 五月天亚洲婷婷 | 午夜18视频在线观看 | 天堂va欧美va亚洲va老司机 | 免费视频99| 麻豆国产精品永久免费视频 | 激情五月av| 日韩电影在线一区二区 | 久久精品视频观看 | 国内久久精品视频 | 97理论片 | 久久久免费看视频 | 亚洲 欧美 变态 国产 另类 | 国产区高清在线 | 五月天狠狠操 | 91在线视频免费播放 | 国产五月色婷婷六月丁香视频 | 69国产精品视频 | 激情五月在线 | 美女免费网视频 | 最新av网站在线观看 | 成片免费观看视频大全 | 国产高清免费观看 | 亚洲丁香久久久 | 日韩一区二区三区视频在线 | 99视频在线看 | 深爱激情av| 免费观看91 | 欧美久久九九 | 免费a视频| 国产四虎在线 | 日韩黄色大片在线观看 | 欧美福利片在线观看 | 97人人爽人人| 看av免费 | 五月婷婷一级片 | 国产精品国内免费一区二区三区 | 97成人资源站 | 欧美aaaxxxx做受视频 | 亚洲成av人片一区二区梦乃 | 精品国产乱码久久久久久久 | 亚洲午夜av电影 | 日日久视频 | 久久久久久久久久久久久影院 | 国产精品字幕 | 亚洲 欧美变态 另类 综合 | 免费日韩一区二区三区 | 91精品一区二区在线观看 | 在线视频黄 | 999久久a精品合区久久久 | 欧美三级高清 | 麻豆视频在线免费看 | 狠狠干狠狠艹 | 日韩av不卡在线播放 | 一区二区精品视频 | 精品免费视频123区 午夜久久成人 | 天天操天天色综合 | 激情五月看片 | 亚洲永久精品在线观看 | 国产精品你懂的在线观看 | 欧美亚洲一级片 | 中国一级特黄毛片大片久久 | 亚洲国产人午在线一二区 | 国产做aⅴ在线视频播放 | 欧美成人亚洲成人 | 久久视频6| 国内精品久久久久久久 | 国产一区精品在线观看 | 有码视频在线观看 | 日韩视频一区二区三区 | 国产精品女同一区二区三区久久夜 | 日韩精品久久久久久久电影竹菊 | 免费看一级黄色大全 | 亚洲视频播放 | 亚洲视频精品在线 | 国产精品久久久久久久久久新婚 | 亚洲视频,欧洲视频 | 国产91精品在线播放 | 99国产视频 | 性色视频在线 | 成人国产精品电影 | 一区免费观看 | av东方在线 | 欧洲一区二区在线观看 | 成人在线免费av | 日本中文字幕在线播放 | 久久se视频 | 日韩在线高清免费视频 | 国产视频不卡一区 | 黄色三级在线观看 | 五月综合婷| www.久久精品视频 | 日韩黄色在线观看 | 婷婷久月 | 精品色综合| 国产99视频在线观看 | 日韩精品无码一区二区三区 | 国产一级二级在线观看 | 成年人黄色免费看 | 欧美日韩国产精品一区二区亚洲 | 91视频电影| 99久久日韩精品免费热麻豆美女 | 色综合天天综合 | 黄网站色 | 久久午夜国产 | 久久精品男人的天堂 | 夜夜婷婷| 日韩精品欧美专区 | 亚洲黄色一级大片 | 婷婷久久久久 | 色吊丝av中文字幕 | 中文字幕资源网在线观看 | 日本精品午夜 | 五月婷婷,六月丁香 | 97福利视频 | 亚洲乱亚洲乱亚洲 | 日韩中文字幕免费视频 | 免费福利视频网站 | 天天操天天色天天 | 日韩最新在线视频 | 午夜精品中文字幕 | 天天爱天天操天天爽 | 亚洲精品乱码久久久久久蜜桃欧美 | 8x成人免费视频 | 国产精品淫| 精品国产精品国产偷麻豆 | 91成人在线免费观看 | 亚洲国产日韩一区 | 91精品国自产在线 | 午夜在线免费观看视频 | 国产亚洲精品女人久久久久久 | 美女视频永久黄网站免费观看国产 | 91精品国产福利在线观看 | 三级黄色免费片 | 免费高清在线观看成人 | 日韩精品一区二区免费视频 | 91激情小视频 | 亚洲精品免费观看视频 | 波多野结衣久久资源 | 精品成人在线 | 91.精品高清在线观看 | 亚洲日本欧美在线 | 国产三级精品在线 | 中文不卡视频在线 | 亚洲日本一区二区在线 | 亚洲色图27p | 成人免费在线看片 | 丁香六月婷婷综合 | 1000部国产精品成人观看 | 丁香五月亚洲综合在线 | 成人精品久久 | 在线观看日韩精品视频 | 色婷婷av国产精品 | 国产在线欧美日韩 | 中文字幕av在线免费 | 午夜色性片 | 大胆欧美gogo免费视频一二区 | 亚洲国产资源 | av观看久久久 | 久久99久久99免费视频 | 久久久久久片 | 国产精品一码二码三码在线 | 国产日韩av在线 | wwwww.国产| 欧美整片sss | 日韩在线一级 | 中文字幕精品一区二区精品 | 欧美在线你懂的 | 在线视频 精品 | 精品久久久久久一区二区里番 | 亚洲经典视频在线观看 | 国产高h视频 | 久草网免费 | 亚洲美女在线一区 | 欧美在线free | 久久成人精品视频 | 国产999精品视频 | 综合天天网 | 日韩欧美亚州 | 亚洲精品视频免费在线观看 | 国产精品国产三级在线专区 | av在线激情| 国产精品美女久久久久aⅴ 干干夜夜 | 97操操操 | 激情五月激情综合网 | 久久a国产 | av资源在线看 | 亚洲久草在线视频 | 国产精品12| 欧美影院久久 | 中文字幕观看av | 久久只精品99品免费久23小说 | 久久精品国产第一区二区三区 | 天天干天天操天天入 | 亚洲一区视频在线播放 | 国内视频 | 午夜电影久久久 | 狠狠色丁香久久综合网 | 天天操天天干天天摸 | 91av在线免费观看 | 四虎视频 | 午夜精品一区二区三区免费视频 | 91精品免费 | 一区在线观看 | 国产特级毛片aaaaaa高清 | 欧美日韩三级在线观看 | 欧美影院久久 | 日韩免费高清在线观看 | 色五月激情五月 | 99热这里| 精品人人爽 | 国产精品免费在线 | 狠狠色狠狠色综合系列 | 六月天综合网 | 在线视频中文字幕一区 | 国产欧美最新羞羞视频在线观看 | 一本一本久久a久久精品综合小说 | 国产色视频网站2 | 免费看一及片 | 91在线porny国产在线看 | 日本xxxx.com| 开心激情久久 | 久草免费手机视频 | 亚洲高清av| 久久免费视频在线观看30 | 久草国产在线观看 | 97超碰总站 | 久久免费视频在线观看 | 日韩av在线资源 | 又粗又长又大又爽又黄少妇毛片 | 国产一区在线视频播放 | 中文字幕 欧美性 | 亚洲成人av在线 | 91成年人在线观看 | 亚洲精品乱码久久 | 亚洲乱码在线观看 | 99久久超碰中文字幕伊人 | 91香蕉久久 | 三级在线视频观看 | 成人久久电影 | av免费黄色 | 日本精品视频在线 | a天堂中文在线 | 亚洲精品乱码久久久久久久久久 | 国产精品不卡在线观看 | 一区二区国产精品 | 91视频久久久久久 | 亚洲免费一级 | 国产一区二区三区高清播放 | 91在线视频精品 | 一区二区三区精品在线视频 | 亚洲三级黄| 亚洲精品欧美视频 | 亚洲乱码中文字幕综合 | 国产中文字幕视频在线 | 丁香婷婷综合网 | 日韩成人精品 | 欧美在线1| 在线视频欧美日韩 | 激情欧美网 | 欧美一区二区三区在线 | 婷婷在线综合 | 天天色视频| 麻豆视频网址 | 欧美大香线蕉线伊人久久 | 欧美一区二区三区四区夜夜大片 | 久久精品人人做人人综合老师 | 亚洲经典中文字幕 | 色婷婷免费视频 | 亚洲精品一区二区在线观看 | 国产精品国产三级国产aⅴ9色 | 97香蕉久久超级碰碰高清版 | 男女啪啪网站 | 久久视精品 | 国产精品观看在线亚洲人成网 | zzijzzij亚洲日本少妇熟睡 | 国精产品999国精产品岳 | 免费色网站 | 久久精品免视看 | 91精品国产入口 | 在线观看久久 | 亚洲黄电影 | 就要干b| 99精品视频免费观看视频 | 久久九九影视 | 亚洲免费婷婷 | 久久再线视频 | 国产四虎在线 | 国产精品久久久久久久久久久久冷 | 在线 高清 中文字幕 | 99国产精品久久久久老师 | 久久成人免费 | 亚洲精品色婷婷 | 亚洲免费在线观看视频 | 一区二区三区手机在线观看 | 国产精品久久久久久久久久ktv | 久久久国产精品免费 | 色com| 日韩精品一区二区三区不卡 | 婷婷视频在线观看 | 色婷婷免费视频 | 成人毛片一区二区三区 | 综合色中文 | 99九九视频| 成人毛片在线观看视频 | 丁香久久激情 | 午夜精品一区二区三区在线 | 99精品国产福利在线观看免费 | 丁香花五月 | 国产日韩欧美自拍 | 久久69精品久久久久久久电影好 | 99精品视频在线 | 五月婷婷中文网 | 欧美日韩国产三级 | 最新黄色av网址 | 在线观看亚洲专区 | 日韩毛片在线一区二区毛片 | 在线免费观看一区二区三区 | 免费三级a| 国产高清第一页 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 天天插伊人 | 在线亚洲小视频 | 99久久激情 | 日日弄天天弄美女bbbb | 97人人澡人人爽人人模亚洲 | 免费一级片久久 | 国产精品永久在线 | 午夜电影一区 | 成人午夜性影院 | 精品国产一区二区三区蜜臀 | 日韩黄在线观看 | 狠狠狠色丁香婷婷综合久久88 | 国产精品第十页 | 国产精品正在播放 | 亚洲最大成人免费网站 | 国产专区在线播放 | 国产亚洲精品久久久久久电影 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 极品国产91在线网站 | 久久国产精品精品国产色婷婷 | 成人午夜精品久久久久久久3d | 久久久久女教师免费一区 | 日本狠狠色 | 四虎影视精品 | 亚洲精品视频中文字幕 | 精品 激情| 97偷拍视频 | 日韩精品网址 | 国产色影院 | 免费亚洲黄色 | 国产精品久久久久久久久软件 | www.天堂av| 国产精品美女久久久久久2018 | 色综合天天狠天天透天天伊人 | 精品在线不卡 | 91av在线不卡 | 日韩欧美xxx | 欧美日韩在线观看一区二区 | 黄色一级免费 | 99精品免费在线观看 | 日本久久综合网 | 波多野结衣一区三区 | 国产精品福利一区 | 亚洲国产精品久久 | 久久久久久免费毛片精品 | 亚洲专区中文字幕 | 国产综合久久 | 久久tv视频 | 91av观看| 欧美成人性网 | 成人h在线播放 | 国产精品免费视频久久久 | av一级黄| 天堂av在线网址 | 国产视频第二页 | 一本一道久久a久久综合蜜桃 | 国产不卡片| 亚洲综合欧美精品电影 | 久久香蕉一区 | 国内精品久久久久影院一蜜桃 | 中文字幕一区二区三区在线播放 | 亚洲最新在线视频 | 欧美在线久久 | 久久九九视频 | 国产精品乱码在线 | 日韩免费电影一区二区三区 | 国产 在线 高清 精品 | 亚洲久久视频 | zzijzzij亚洲日本少妇熟睡 | 中文字幕一区二区三区在线播放 | 免费在线观看av网址 | 国产一级小视频 | 免费观看一区二区三区视频 | 黄色特一级 | 久久,天天综合 | 香蕉一区 | 色综合久久中文字幕综合网 | 操夜夜操 | 在线观看的av| 一区二区三区免费在线 | 国产精品一码二码三码在线 | 久久国产视屏 | 蜜臀久久99精品久久久久久网站 | 日韩videos | 视频精品一区二区三区 | 丝袜美腿在线播放 | 精品亚洲va在线va天堂资源站 | 狠狠色丁香婷婷综合最新地址 | 狠狠干 狠狠操 | 在线午夜| av 一区二区三区四区 | 婷婷成人亚洲综合国产xv88 | 久久久国产一区 | 国产亚洲久久 | 五月婷婷中文 | 日韩av不卡在线观看 | 九草在线观看 | 久久av一区二区三区亚洲 | 久久久精品久久日韩一区综合 | 国产伦精品一区二区三区无广告 | 国产成年人av | 中文字幕久久精品 | 91麻豆精品国产91久久久久 | 色香蕉视频| 91热| 91精品啪在线观看国产81旧版 | 久久草精品 | 国产精品乱码一区二三区 | 五月色婷 | 欧美大荫蒂xxx | 玖玖在线观看视频 | 国产69精品久久久久9999apgf | 天天综合网 天天综合色 | 在线观看精品一区 | 亚洲欧洲精品在线 | 国产黄色大全 | 日韩在线观看视频免费 | 在线观看国产www | 97天天综合网| 欧美日韩在线网站 | 亚洲在线高清 | 首页国产精品 | 色婷婷av一区二 | 日韩免费在线播放 | 国产精品自产拍在线观看 | 三级性生活视频 | 色.www| 久久精彩视频 | 国产美女在线观看 | 激情久久影院 | 黄色网址a | 欧美性生活一级片 | 麻豆视传媒官网免费观看 | 国产小视频免费在线网址 | 久久亚洲成人网 | 人人爽人人澡 | 人人插超碰 | 99久久综合狠狠综合久久 | 99在线精品免费视频九九视 | 粉嫩av一区二区三区四区五区 | 精品国产伦一区二区三区免费 | 欧美在线不卡一区 | 成人黄色视 | 在线观看精品视频 | 在线观看mv的中文字幕网站 | 久久婷婷久久 | av免费电影在线 | 精品一区精品二区高清 | www.com久久久 | 国产精品久久久久久久久免费看 | 91完整版| 深爱激情亚洲 | 亚洲精品动漫成人3d无尽在线 | 东方av在线免费观看 | 激情av资源 | 精品一区二区在线免费观看 | 久久综合精品国产一区二区三区 | 91av99| 国产精品欧美久久久久无广告 | 亚洲激情五月 | 国产日韩欧美综合在线 | 色999在线| 中文字幕日韩有码 | 国产伦理一区二区 | 奇米先锋| 免费在线一区二区 | 激情视频二区 | 欧美91精品国产自产 | 波多野结依在线观看 | 96精品视频 | 黄色在线观看免费 | 五月激情五月激情 | 国产手机av| 久久精品黄 | 午夜视频在线观看一区二区三区 | 毛片精品免费在线观看 | 亚州av网站 | 高清不卡一区二区在线 | 一区精品在线 | 毛片久久久 | 五月婷婷中文网 | 日韩av中文字幕在线 | 亚洲天天干| 国产免费三级在线观看 | 黄色app网站在线观看 | 黄网站色成年免费观看 | 最新中文字幕在线资源 | 国产99久久久国产精品免费看 | 日日干夜夜操视频 | 国产在线色 | 免费国产一区二区 | 国产精品免费高清 | 欧美日韩国产一区二 | 91精彩视频在线观看 | 深夜免费福利网站 | 97超碰网 | 国产原创91 | 色综合网 | 国产成人久久精品77777综合 | 欧美国产不卡 | 伊人天堂av | 色99在线| 色综合五月天 | 99 久久久久| 色综合激情网 | 日韩视频免费在线 | 久久久久国产一区二区 | 亚洲在线精品 | 99在线精品视频 | 国产成人一区二区精品非洲 | 亚洲特级毛片 | 国产a国产a国产a | 中文字幕成人在线观看 | 波多野结衣一区三区 | 字幕网av| 久久在线观看视频 | 久久精品国产精品亚洲精品 | 亚洲综合色视频在线观看 | 国产偷国产偷亚洲清高 | 2019中文在线观看 | 高清久久久久久 | 欧美一区日韩一区 | www黄在线 | 婷婷色在线视频 | 精品在线观看一区二区 | 国产黑丝袜在线 | 精品免费国产一区二区三区四区 | 麻豆精品在线视频 | 欧美精品被 | 99热这里是精品 | 久久免费视频这里只有精品 | 色综合天天干 | 成人 国产 在线 | 国产精品一区二区电影 | 欧美精品一区二区三区四区在线 | 日韩av电影中文字幕在线观看 | 久久欧美精品 | 一区二区国产精品 | av资源免费在线观看 | 午夜色站| 精品主播网红福利资源观看 | 六月激情丁香 | 日日天天| 日韩在线视频免费看 | 精品一区二区在线免费观看 | 久草在线免费新视频 | 国产成人一级 | 狠狠躁日日躁狂躁夜夜躁 | 国产91在线 | 美洲 | 天天干夜夜干 |