简体   繁体   English

如何将数据从DialogFragment发送到DialogFragment?

[英]How to send data from DialogFragment to DialogFragment?

I have a problem with sending data from fragment to fragment. 我在片段之间发送数据时遇到问题。 I have DialogFragment named fmonday , it is Viewpager's fragment. 我已经DialogFragment命名fmonday ,它是Viewpager的片段。

I call other DialogFragment , named AlertDFragment to add some data to my fragment. 我呼吁其他DialogFragment ,命名AlertDFragment一些数据添加到我的片段。 I can read the data from spinner, it's working good. 我可以从微调器中读取数据,效果很好。

Now I need to send one variable, type string , from AlertDFragment to fmonday . 现在,我需要将一个类型为string变量从AlertDFragment发送到fmonday

Here is the code of fmonday : 这是fmonday的代码:

public class fmonday extends DialogFragment implements LoaderManager.LoaderCallbacks<Cursor> {

DB db;
Button button12;
DialogFragment dlg1;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    dlg1 = new AlertDFragment();
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fmonday, container, false);

    button12 = (Button) rootView.findViewById(R.id.button12);
    button12.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {

            dlg1.show(getFragmentManager(), "dlg1");

        }
    });
    return rootView;
}

And code of AlertDFragment : AlertDFragment代码:

 public class AlertDFragment extends DialogFragment {
 Spinner spin;
 DB db;
 String string1;
 Button button13;
 private String namestr;
 public Dialog onCreateDialog(Bundle savedInstanceState) {


    AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
    LayoutInflater li = LayoutInflater.from(getActivity());
    View fdfS = li.inflate(R.layout.fdf, null);
    adb.setView(fdfS);
    spin=(Spinner)fdfS.findViewById(R.id.spinner);
    db = new DB(getActivity());
    db.open();
    spin.setOnItemSelectedListener(new OnSpinnerItemClicked());
    loadSpinnerData();
    button13 = (Button) fdfS.findViewById(R.id.button13);
    button13.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Toast.makeText(getActivity().getApplicationContext(), "Clicked : " +
                    string1, Toast.LENGTH_LONG).show();
            getDialog().dismiss();
        }
    });
    return adb.create();
}

I can't find the way to send this string1 variable to my fmonday DialogFragment, because simple intent doesn't work with non-activity things. 我找不到将这个string1变量发送到我的fmonday DialogFragment的方法,因为简单的intent不适用于非活动性的事物。 Also read some advices about bundle , but couldn't find out how to work with it. 还阅读了有关bundle一些建议,但找不到如何使用它。

Thanks 谢谢

UPDATE fmonday : fmonday 更新

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    dlg1 = new AlertDFragment();
    string1 =  getArguments().getString("latitude");
}

AlertDFragment : AlertDFragment

  public class AlertDFragment extends DialogFragment {
  Spinner spin;
  DB db;
  String string1;
  Button button13;
  private String namestr;
  public Dialog onCreateDialog(Bundle savedInstanceState) {


    AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
    LayoutInflater li = LayoutInflater.from(getActivity());
    View fdfS = li.inflate(R.layout.fdf, null);
    adb.setView(fdfS);
    spin=(Spinner)fdfS.findViewById(R.id.spinner);
    db = new DB(getActivity());
    db.open();
    spin.setOnItemSelectedListener(new OnSpinnerItemClicked());
    loadSpinnerData();
    button13 = (Button) fdfS.findViewById(R.id.button13);
    button13.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Toast.makeText(getActivity().getApplicationContext(), "Clicked : " +
                    string1, Toast.LENGTH_LONG).show();
            Bundle bundle = new Bundle();
            bundle.putString("latitude", string1);
            fmonday alertdfragment= new fmonday();
            alertdfragment.setArguments(bundle);
            getDialog().dismiss();
        }
    });
    return adb.create();
}

To Set Data: 设置数据:

Bundle bundle = new Bundle();
bundle.putString("latitude", latitude);
MapFragment mapFragment = new MapFragment();
mapFragment.setArguments(bundle);

To Get Data 获取数据

String latitude =  getArguments().getString("latitude")

You can crate a setter to your second dialogFragment ex: 您可以将设置器创建到第二个dialogFragment ex:

public void setSmth(String value)
{
     this.myData = value;
}

, than on your first dialog ,而不是第一个对话框

DialogFragment dlg1 = new AlertDFragment();
dlg1.setSmth(your data here);

before showing the second one; 在显示第二个之前;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM