DialogFragment使用

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

使用DialogFragment至少需要实现onCreateView或者onCreateDIalog方法。

onCreateView即使用定义的xml布局文件展示Dialog。
onCreateDialog即利用AlertDialog或者Dialog创建出Dialog。

方法一:重写onCreateView创建Dialog

a)新建一个布局文件dialog.xml 作为要现实的对话框

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/id_label_your_name"
        android:layout_width="wrap_content"
        android:layout_height="32dp"
        android:gravity="center_vertical"
        android:text="Your name:" />

    <EditText
        android:id="@+id/id_txt_your_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/id_label_your_name"
        android:imeOptions="actionDone"
        android:inputType="text" />

    <Button
        android:id="@+id/id_sure_edit_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@id/id_txt_your_name"
        android:text="ok" />

</RelativeLayout>

b)继承DialogFragment类,重写onCreateView方法
public class Dialogfr extends DialogFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog, container);
        return view;
    }
}


c)测试运行:Main方法中调用:

 android.app.FragmentManager fragmentManager = getFragmentManager();
        dialog.show(getFragmentManager(), "loginDialog");


不过默认对话框有个讨厌的标题,我们怎么去掉呢:
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);

方法二: 重写onCreateDialog创建Dialog

重写onCreateDialog. 一般可以使用AlertDialog或者Dialog创建对话框。

首先脑补下AlertDialog的用法,AlertDialog的构造方法都是Protected,

所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。

要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法。

接着,必须了解AlertDialog.Builder的几个用法。

(关于AlertDialog的详解,查看Android AlertDialog 详解 )

setTitle :为对话框设置标题 
setIcon :为对话框设置图标 
setMessage:为对话框设置内容 
setView : 给对话框设置自定义样式 
setItems :设置对话框要显示的一个list,一般用于显示几个命令时 
setMultiChoiceItems :用来设置对话框显示一系列的复选框 
setNeutralButton :普通按钮 
setPositiveButton :给对话框添加"Yes"按钮 
setNegativeButton :对话框添加"No"按钮 
create : 创建对话框 
show :显示对话框


onCreateDialog中一般可以使用AlertDialog或者Dialog创建对话框,

不过既然google不推荐直接使用Dialog,我们就使用AlertDialog来创建一个登录的对话框。

A)创建布局文件

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

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="64dp"
        android:background="#FFFFBB33"
        android:contentDescription="@string/app_name"
        android:scaleType="center"
        android:src="@drawable/title" />

    <EditText
        android:id="@+id/id_txt_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="4dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginTop="16dp"
        android:hint="input username"
        android:inputType="textEmailAddress" />

    <EditText
        android:id="@+id/id_txt_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginTop="4dp"
        android:fontFamily="sans-serif"
        android:hint="input password"
        android:inputType="textPassword" />

</LinearLayout>


b)继承DialogFragment重写onCreateDialog方法

public class DialogFrag extends DialogFragment
{

    @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.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)
                // Add action buttons
                .setPositiveButton("Sign in",
                        new DialogInterface.OnClickListener()
                        {
                            @Override
                            public void onClick(DialogInterface dialog, int id)
                            {
                            }
                        }).setNegativeButton("Cancel", null).setNeutralButton("详细",null);


        return builder.create();
    }
}

C)主函数调用

DialogFrag dialog = new DialogFrag();
dialog.show(getFragmentManager(), "loginDialog");

密码应该显示为****************,并且把登陆的用户名密码返回Activity

首先在其内部声明一个接口。

public class LoginDialogFragment extends DialogFragment {
public interface LoginInputListener {
void onLoginInputComplete(String username, String password);
}
}
 
然后在相应的方法是执行这一段:
 
LoginInputListener listener = (LoginInputListener) getActivity();
listener.onLoginInputComplete(mUsername.getText().toString(), mPassword .getText().toString()); 
 
最后在MainActivity中需要实现我们的接口LoginInputListener,实现我们的方法。
public class MainActivity extends Activity  implements LoginInputListener {
@Override
public void onLoginInputComplete(String username, String password) {
Toast.makeText(this, "帐号:" + username + ", 密码 :" + password, 
 
      Toast.LENGTH_SHORT).show();  
}
}

public class DialogFrag extends DialogFragment
{
    private EditText mUsername;
    private EditText mPassword;

    public interface LoginInputListener
    {
        void onLoginInputComplete(String username, String password);
    }

    @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.dialog, null);
        mUsername = (EditText) view.findViewById(R.id.id_txt_username);
        mPassword = (EditText) view.findViewById(R.id.id_txt_password);
        // Inflate and set the layout for the dialog  
        // Pass null as the parent view because its going in the dialog layout  
        builder.setView(view)
                // Add action buttons  
                .setPositiveButton("Sign in",
                        new DialogInterface.OnClickListener()
                        {
                            @Override
                            public void onClick(DialogInterface dialog, int id)
                            {
                                LoginInputListener listener = (LoginInputListener) getActivity();
                                listener.onLoginInputComplete(mUsername
                                        .getText().toString(), mPassword
                                        .getText().toString());
                            }
                        }).setNegativeButton("Cancel", null);
        return builder.create();
    }
}

 


public class MainActivity extends AppCompatActivity implements DialogFrag.LoginInputListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DialogFrag dialog = new DialogFrag();
        dialog.show(getFragmentManager(), "loginDialog");
    }

    @Override
    public void onLoginInputComplete(String username, String password) {
        Toast.makeText(this, "帐号:" + username + ",  密码 :" + password,
                Toast.LENGTH_SHORT).show();
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 DialogFragment 可以让你更方便地创建和管理对话框。下面是使用 DialogFragment 的基本步骤: 1. 创建一个继承自 `DialogFragment` 的类。 ```java public class MyDialogFragment extends DialogFragment { // ... } ``` 2. 在 `onCreateDialog()` 方法中创建对话框并返回。 ```java @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Create a new AlertDialog and set its properties AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("My Dialog Title"); builder.setMessage("Hello, DialogFragment!"); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Do something when OK is clicked } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Do something when Cancel is clicked } }); return builder.create(); } ``` 在 `onCreateDialog()` 方法中,你可以创建任何类型的对话框,例如 `AlertDialog`、`ProgressDialog`、`DatePickerDialog` 等等。 3. 在需要显示对话框的地方,创建一个实例并调用 `show()` 方法。 ```java MyDialogFragment dialogFragment = new MyDialogFragment(); dialogFragment.show(getSupportFragmentManager(), "MyDialogFragment"); ``` 这里使用了 `getSupportFragmentManager()` 方法来获取 `FragmentManager`,并将 `DialogFragment` 添加到 `FragmentManager` 中。第二个参数是一个字符串标记,用于在以后找到该 `DialogFragment`。 以上就是使用 `DialogFragment` 的基本步骤。使用 `DialogFragment` 可以让你更方便地管理对话框的生命周期和状态,同时也可以让你的代码更加模块化和可重用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值