2013-05-11 4 views
6

Ich habe 3 SherlockListFragments in meiner App. Jedes Fragment hat einige editTexts und das letzte Fragment hat eine Schaltfläche, auf die beim Drücken aller Daten im ersten und zweiten Fragment zugegriffen und diese gespeichert werden sollen. Ich verwendete Bündel, um Daten zwischen Fragmenten zu senden. mit dem einfachen folgende Beispiel Dies ist der Code meines ersten Fragments:mit Bundle, um Daten zwischen Fragment zu einem anderen Fragment Beispiel

public class PersonalDataFragment extends SherlockListFragment { 


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

    View v = inflater.inflate(R.layout.fragmet_personal_data, container, false); 

    return v; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    PersonalDataFragment fragment = new PersonalDataFragment(); 
    Bundle bundle = new Bundle(); 
    bundle.putString("y", "koko"); //any string to be sent 
    fragment.setArguments(bundle); 

    super.onCreate(savedInstanceState); 
} 

} und dies ist der Code des Fragments, das den Text empfängt:

public class WorkExpRefFragment extends SherlockListFragment { 
String myInt; 

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


    final EditText t = (EditText) view.findViewById(R.id.editText5); 
    final Button generate = (Button)view.findViewById(R.id.button2); 

    generate.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      t.setText(myInt + "sadfigha"); 
     } 
    }); 
    return view; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    Bundle bundle = this.getArguments(); 
    if(getArguments()!=null) { 
     myInt = getArguments().getString("y"); 
    } 

    super.onCreate(savedInstanceState); 
} 

}

Jetzt habe ich eine Null im dritten Fragment, was soll ich tun? Vielen Dank im Voraus

Antwort

6

Es ist normal, dass Ihr Code fehlschlägt. Im ersten Fragment erstellen Sie nur eine neue Instanz von PersonalDataFragment und übergeben diese an eine Bundle mit den Daten. Das Problem ist, obwohl Fragment die Daten in der Bundle enthält, das Fragment selbst ist nicht das von der App (ist nicht einmal an die Activity angeschlossen). Sie setzen auch die Bundle auf eine PersonalDataFragment Instanz, aber Sie versuchen, auf die Daten in einer WorkExpRefFragment zugreifen, die offensichtlich nicht funktionieren wird, da die beiden Fragmente keine direkte Verbindung haben.

Eine einfache Lösung für das, was Sie tun möchten, ist das Activity "Speichern" der Daten für Ihre Fragmente, da die Activity für alle Fragmente verfügbar ist. Erstellen Sie zunächst zwei Methoden in der Activity Halten der drei Fragmente:

public void saveData(int id, Bundle data) { 
    // based on the id you'll know which fragment is trying to save data(see below) 
    // the Bundle will hold the data 
} 

public Bundle getSavedData() { 
    // here you'll save the data previously retrieved from the fragments and 
    // return it in a Bundle 
} 

Dann wird Ihre Fragmente ihre Daten wie folgt speichern:

public class PersonalDataFragment extends SherlockListFragment { 

    // this will identify the PersonalDataFragment fragment when trying to save data 
    public void static int id PERSONAL_ID = 1; 
    //... 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Bundle bundle = new Bundle(); 
     bundle.putString("y", "koko"); //any string to be sent 
     YourActivity activity = (YourActivity) getActivity(); 
     activity.saveData(PERSONAL_ID, bundle); 
    }  
} 

Um die Daten im WorkExpRefFragment Fragment abzurufen:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    YourActivity activity = (YourActivity) getActivity(); 
    Bundle savedData = activity.getSavedData(); 
} 

Je nachdem, wie Sie diese Fragmente verwendet haben, funktioniert diese Lösung möglicherweise nicht. Denken Sie auch daran, dass der Bundle, den Sie wie oben beschrieben durchlaufen, nicht für eine Konfigurationsänderung beibehalten wird.

+0

Danke für Ihre Antwort, es funktioniert für mich, aber ich brauche es, um die Daten zu erhalten, wenn der Knopf (in der dritten Frag.) Nicht gedrückt wird, wenn der erste frag. geschaffen. Ich möchte, dass es für eine Konfigurationsänderung beibehalten wird. Also, was soll ich tun? – Fareed

+0

Ich habe es und machte addTextChanged listeiner :) Danke – Fareed