2017-04-03 94 views
0

在我的應用程序中,我有2個片段:fragmentDiaryfragmentCal。我想從fragmentCal撥打fragmentDiary。爲此,我在MainActivity中爲此創建了一個函數callFragmentDiary()。因此,從fragmentCal開始,調用MainActivity中的此函數。然後這個函數從MainActivity調用fragmentDiary。不過,我在這個函數的下一行獲得java.lang.IllegalStateExceptionjava.lang.IllegalStateException:(活動已被銷燬)

ft.replace(R.id.container , fragDiary).commit(); 

以下是相關代碼:

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

回答

0

你實例化一個(new MainActivity). callFragmentDiary,而它應該是((MainActivity)getActivity()).callFragmentdiary

另外,在onCreate方法中獲得FragmentManager可能是一個好主意,因爲在加載/實例化類時可能不會設置片段管理器。僅當您要使用它時才創建FragmentTransaction

+0

這是爲啥工作? (新的MainActivity).callFragmentDiary'出了什麼問題?爲什麼我不能創建一個'MainActivity'的對象並使用它來訪問它的功能? – heathcliff

+0

因爲活動由Android Framework實例化。你不應該自己實例化它們。您正在新實例上調用方法'callFragmentDiary',而不是正在運行代碼的實例。 –

相關問題