2017-04-03 3 views
0

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

Antwort

0

Sie einenInstanziieren 210 in der Besetzung, während es so etwas wie ((MainActivity)getActivity()).callFragmentdiary sein sollte.

Es kann auch eine gute Idee sein, die FragmentManager innerhalb der onCreate Methode zu erhalten, da der Fragmentmanager möglicherweise nicht eingerichtet wird, wenn die Klasse geladen/instanziiert wird. Und erstellen Sie das FragmentTransaction nur, wenn Sie es verwenden werden.

+0

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

+0

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. –

Verwandte Themen