底部弹出DialogFragment+与Activity数据交互

来源:互联网 发布:淘宝情侣网店是什么 编辑:程序博客网 时间:2024/05/01 22:34

先贴上效果图:


效果图.jpg


实现步骤特别简单:
1.新建DialogFragment类,在OnCreateView中返回你自定义的view.

public class ADDialogFragment extends DialogFragment{  @Override  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {      //加这句话去掉自带的标题栏      getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);      View view = inflater.inflate(R.layout.dialogfragment_person, null);      //init(view);      return view;  }}

自定义dialogfragment_person的布局文件如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:layout_width="match_parent"              android:background="@color/white"              android:layout_height="match_parent"              android:orientation="vertical">    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="15.5dp"        android:gravity="center_horizontal"        android:text="请选择乘车人数"        android:textColor="#666666"        android:textSize="16sp"/>    <TextView        android:id="@+id/tv1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="16.5dp"        android:gravity="center_horizontal"        android:text="1人"        android:textColor="#333333"        android:textSize="18sp"/>    <TextView        android:id="@+id/tv2"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="16.5dp"        android:gravity="center_horizontal"        android:text="2人"        android:textColor="#333333"        android:textSize="18sp"/>    <TextView        android:id="@+id/tv3"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="16.5dp"        android:gravity="center_horizontal"        android:text="3人"        android:textColor="#333333"        android:textSize="18sp"/>    <TextView        android:id="@+id/tv4"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="16.5dp"        android:layout_marginBottom="16.5dp"        android:gravity="center_horizontal"        android:text="4人"        android:textColor="#333333"        android:textSize="18sp"/></LinearLayout>

在MainActivity的Button(或ImageView或其他)的点击事件中作如下处理即可弹出dialogfragment:

ADDialogFragment dialogFragment = new ADDialogFragment();dialogFragment.show(getFragmentManager(),"android");

ok了,这时你会发现它显示在页面中央,但是我们想让dialogfragment显示到页面底部,那么只需在DialogFragment中添加如下代码即可:

@Overridepublic void onStart() {    super.onStart();    Window window = getDialog().getWindow();    WindowManager.LayoutParams params = window.getAttributes();    params.gravity = Gravity.BOTTOM;    params.width = WindowManager.LayoutParams.MATCH_PARENT;    window.setAttributes(params);    //设置背景透明    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));}

最后一步:传递数据到MainActivity中:
在dialogfragment中:

public interface OnDialogListener {    void onDialogClick(String person);}public void setOnDialogListener(OnDialogListener dialogListener){    this.mlistener = dialogListener;}

在Textview的点击事件中:

public OnDialogListener mlistener;@Overridepublic void onClick(View view) {    switch (view.getId()) {        case R.id.tv1:            mlistener.onDialogClick("1");            dismiss();            break;        case R.id.tv2:            mlistener.onDialogClick("2");            dismiss();            break;        case R.id.tv3:            mlistener.onDialogClick("3");            dismiss();            break;        case R.id.tv4:            mlistener.onDialogClick("4");            dismiss();            break;    }}

在MainActivity中实现此接口即可:

dialogFragment.setOnDialogListener(new PersonDialogFragment.OnDialogListener() {    @Override    public void onDialogClick(String person) {        ToastUtil.showToast(person);    }});

0 0
原创粉丝点击