In meiner App habe ich 2 Fragmente: fragmentDiary
und fragmentCal
. Ich versuche, fragmentDiary
von fragmentCal
anrufen. Ich habe eine Funktion callFragmentDiary()
für diesen Zweck in MainActivity
gemacht. Von fragmentCal
wird diese in MainActivity vorhandene Funktion aufgerufen. Dann ruft diese Funktion fragmentDiary
von MainActivity auf. Jedoch bekomme ich die java.lang.IllegalStateException
in der folgenden Zeile in dieser Funktion.java.lang.IllegalStateException: (Aktivität wurde zerstört) in Fragmenten
ft.replace(R.id.container , fragDiary).commit();
Es folgt der entsprechende Code:
In fragmentCal.java
(new MainActivity()).callFragmentDiary(date);
MainActivity
package com.example.nirvan.finaldiary;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
fragmentDiary fragDiary = new fragmentDiary();
fragmentCal fragCal = new fragmentCal();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ft.add(R.id.container,fragCal).commit();
}
public void callFragmentDiary(int []date){
Bundle bundle=new Bundle();
bundle.putInt("day",date[0]);
bundle.putInt("month",date[1]);
fragDiary.setArguments(bundle);
ft.replace(R.id.container , fragDiary).commit();
}
}
Warum funktioniert das? Was ist los mit '(new MainActivity) .callFragmentDiary'? Warum kann ich kein Objekt von 'MainActivity' erstellen und damit auf die darin enthaltenen Funktionen zugreifen? – heathcliff
Da Aktivitäten vom Android Framework instanziiert werden. Sie sollten sie niemals selbst instanziieren. Sie rufen die Methode 'callFragmentDiary' für die neue Instanz anstatt für die Instanz, in der Sie den Code ausführen, auf. –