Activity 与 DialogFragment 之间的数据传递

来源:互联网 发布:fft算法的基本思想 编辑:程序博客网 时间:2024/05/22 14:43

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

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);    }}

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

2 0
原创粉丝点击