美文网首页Mobile
底部弹出DialogFragment+与Activity数据交互

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

作者: TheShy_ | 来源:发表于2016-12-05 18:03 被阅读2721次

    先贴上效果图:


    效果图.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中添加如下代码即可:

    @Override
    public 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;
    @Override
    public 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);
        }
    });
    

    相关文章

      网友评论

        本文标题:底部弹出DialogFragment+与Activity数据交互

        本文链接:https://www.haomeiwen.com/subject/vuflmttx.html