Activity 与 DialogFragment 之间的数据传递

时间:2022-11-01 13:44:51

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

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

}

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