Activity 与 DialogFragment 之间的数据传递

版权声明:本文为博主原创文章,但是可以随意转载。 https://blog.csdn.net/zhang5690800/article/details/70182494

这篇文章参考了网友的相关资料(因为参考了多名前辈的资料,这里就不一一指明出处了),不过还是非常感谢前辈们的无私分享。此文仅是学习过后的总结,主要目的是以后自己看着方便,如果恰巧能帮到你那也是再好不过了。(文中代码并不全,只是概括了思路,是从我目前的项目中拆下来的)

Activity向DialogFragment传递数据,采用setArguments( Bundle )、getArguments( Bundle )方法传递数据。这个有些类似Activity之间通过Intent传递数据。

Activity中的代码为

    // 列表项监听器(这里点击列表项弹出一个自定义的DialogFragment)
    ListView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {

            // MyDialogFragment 为自定义的 DialogFragment -------------
            MyDialogFragment myDialogFragment = new MyDialogFragment(); 
            Bundle bundle = new Bundle();
            bundle.putInt("Data01", 11111);
            bundle.putInt("Data02", 22222);
            bundle.putInt("Data03", 33333);
            myDialogFragment.setArguments(bundle);
            myDialogFragment.show(getFragmentManager(), "DialogFragment"); 

        }
    };

MyDialogFragment中的代码为

public class MyDialogFragment extends DialogFragment {

   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // 接收关联Activity传来的数据 -----
        Bundle bundle = getArguments();
        if (bundle != null) {
            int data01 = bundle.getInt("Data01");
            int data02 = bundle.getInt("Data02");
            int data03 = bundle.getInt("Data03");
            Log.d("Tag", "Data01: " + data01 + " Data02: " + data02 + " Data03: " + data03);
        }
   }
   ......
}

DialogFragment向Activity传递数据,采用接口的方式传递数据。在DialogFragment声明一个接口,然后在Activity中调用这个接口。

MyDialogFragment中的代码为

public class MyDialogFragment extends DialogFragment {

    private View view;
    private MyDialogFragment_Listener myDialogFragment_Listener;

    // 回调接口,用于传递数据给Activity -------
    public interface MyDialogFragment_Listener {
        void getDataFrom_DialogFragment(int Data01, int Data02, int Data03);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        try {
            myDialogFragment_Listener = (MyDialogFragment_Listener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implementon MyDialogFragment_Listener");
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        // 接收关联Activity传来的数据 -----
        Bundle bundle = getArguments();
        if (bundle != null) {
            int data01 = bundle.getInt("Data01");
            int data02 = bundle.getInt("Data02");
            int data03 = bundle.getInt("Data03");
            Log.d("Tag", "Data01: " + data01 + " Data02: " + data02 + " Data03: " + data03);
        }

        // 去掉对话框默认标题栏
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);

        // 加在自定义界面
        view = inflater.inflate(R.layout.my_dialog, container);

        return view;
    }

    // DialogFragment关闭时回传数据给Activity
    @Override
    public void onDestroy() {
        // 通过接口回传数据给activity
        if (myDialogFragment_Listener != null) {
            myDialogFragment_Listener.getDataFrom_DialogFragment(0, 0, 7);
        }
        super.onDestroy();
    }
}

Activity中的代码为

public class Activity_AirCondition_AdvancedSettings extends Activity // 这里要implements刚才的接口
        implements MyDialogFragment.MyDialogFragment_Listener {

    // 引用接口中定义的方法
    @Override
    public void getDataFrom_DialogFragment(int data01, int data02, int data03) {
        Log.d("Tag", "DialogFragment回传的数据为:" + data01 + " " + data02 + " " + data03);
    }

}

以上代码并不全面,仅为关键代码,表达这个思路,不要直接粘到项目中去。

猜你喜欢

转载自blog.csdn.net/zhang5690800/article/details/70182494