2017-04-03 140 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',而不是正在运行代码的实例。 –

相关问题