Guten Tag,
ich sitze jetzt schon seit mehreren Tagen an diesem Problem und denke, dass ich da irgendwo einen grundlegenden Verständnis Fehler habe. Folgendes Szenario:
Ich habe eine Activity, mit 3 Fragments, welche durch einen FragmentStatePagerAdapter verwaltet werden. Wenn ich in Fragment 3 auf ein Item in der Liste klicke, wird eine Methode der Activity aufgerufen, welche zu Fragment 2 wechselt und dort einen Dialog öffnet, welcher dann abschließend ein erstelltes Objekt in Fragment 2 anzeigt.
Mein Problem ist nun, dass getContext(), getActivity(), getView() alle null wiedergeben, obwohl ich ja eigentlich schon auf dem Fragment sein müsste.
Auch das Speichern der Activity bzw. des Contextes in onAttach bzw. onCreateView ist dann null. Wenn ich die Methode direkt aus dem Fragment aufrufe, funktioniert alles.
Nun folgt der Code, ich habe probiert, es so zu vereinfachen wie möglich, aber das Projekt ist schon relativ umfangreich.
MainActivity:
public void openDialog(int fragment, String data)
{
mViewPager.setCurrentItem(fragment); // Wechsel zum betroffenen Fragment
switch(fragment)
{
case AKTUELLE_BESTELLEUNG:
((AktuelleBestellungFragment)mSectionsPagerAdapter.getItem(AKTUELLE_BESTELLEUNG)).openNewBestellungDialog( this, Integer.parseInt(data)); // öffne den Dialog, this ist die Acitivity, obwohl das nur ein Versuch ist, da getActivity() null ist im Fragment
}
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch(position)
{
case 0:
return AlleBestellungenFragment.createInstance();
case 1:
return AktuelleBestellungFragment.createInstance();
case 2:
return ArtikelUebersichtFragment.createInstance();
default:
return null;
}
}
@Override
public int getCount() {
return 3;
}
}
Alles anzeigen
AktuelleBestellungFragment, das Fragment, welches den Dialog enthält:
public static AktuelleBestellungFragment createInstance()
{
AktuelleBestellungFragment f = new AktuelleBestellungFragment();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_aktuelle_bestellungen, container, false);
this.v = v;
Log.i("onCreate", "called");
setHasOptionsMenu(true);
initializeView(v);
return v;
}
public void openNewBestellungDialog(final Activity c, int id)
{
// hier sind die Methoden getActivity()/getView()/getContext() null
//während c hier für die meisten Sachen reicht, kann ich nicht auf den View des Fragments zugreifen, was ich aber muss, ob dieses neu zu laden.
}
Alles anzeigen
Wenn in Fragment 3 auf ein Item geklickt wird, passiert folgendes:
((MainActivity)getActivity()).openDialog(MainActivity.AKTUELLE_BESTELLEUNG,artikel_lieferant[position].getId()+"" );
Ich hoffe, ich habe mich verständlich ausgedrückt.
Wie sollte man so etwas angehen? Bzw. warum sind die Abfragen überhaupt null, wenn doch in getItem eine neue Instanz erstellt wird, falls diese nicht mehr vorhanden ist?
Vielen Dank schon mal für die Hilfe, ich stecke hier echt fest