2016-05-16 22 views
0

Ich habe ein Problem beim Senden von Daten von Fragment zu Fragment. Ich habe DialogFragment namens fmonday, es ist Viewpager Fragment.Wie kann ich Daten von DialogFragment an DialogFragment senden?

Ich rufe andere DialogFragment, genannt AlertDFragment, um einige Daten zu meinem Fragment hinzuzufügen. Ich kann die Daten von Spinner lesen, es funktioniert gut.

Jetzt muss ich eine Variable senden, Typ string, von AlertDFragment bis fmonday. Hier

ist der Code von 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; 
} 

Und Code von 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(); 
} 

ich den Weg nicht finden kann diese string1 Variable mein fmonday DialogFragment zu schicken, weil einfach intent funktioniert nicht mit Nicht-Aktivitäten. Lies auch einige Ratschläge über bundle, konnte aber nicht herausfinden, wie man damit arbeitet.

Dank

UPDATE fmonday:

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

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(); 
} 
+0

Sie können einen Getter für 'string1' schreiben und dann können Sie einfach über dlg1 darauf zugreifen, wie in' dlg1.getstring1() '. –

+0

Erstellen eines benutzerdefinierten Ereignis-Listeners für die gemeinsame Nutzung von Daten zwischen den beiden Fragmenten –

Antwort

0

Um Datensatz:

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

Um Daten importieren

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

> Fehler: (43, 17) error: kann die Symbolklasse MapFragment nicht finden. Wie initialisiert MapFragment? Oder ist es wie mein 'AlertDFragment'? – ABL

+0

Es ist nur ein Beispiel-Code, den ich angegeben habe, müssen Sie Ihre AlertDFragment und Fmonday-Fragment verwenden. –

+0

Ich weiß nicht warum, vielleicht habe ich etwas falsch geschrieben, aber es funktioniert nicht. – ABL

0

Sie können Kiste ein Setter auf Ihre zweite dialogFragment ex:

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

, als auf dem ersten Dialog

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

bevor die zeigt, das Zweite;

+0

Also Setter, um Daten vom ersten Fragment zu dialogFragment zu senden? Ich würde es gerne von "AlertDFragment" zu "fmonday" machen. Wie bei 'onDismiss();' aufgerufen, sollte es einige Variablen aus Dialog an 'fmonday' senden. – ABL

Verwandte Themen