java.lang.IllegalStateException:(活动已被销毁)
问题描述:
在我的应用程序中,我有2个片段:fragmentDiary
和fragmentCal
。我想从fragmentCal
拨打fragmentDiary
。为此,我在MainActivity
中为此创建了一个函数callFragmentDiary()
。因此,从fragmentCal
开始,调用MainActivity中的此函数。然后这个函数从MainActivity调用fragmentDiary
。不过,我在这个函数的下一行获得java.lang.IllegalStateException
。java.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();
}
}
答
你实例化一个(new MainActivity). callFragmentDiary
,而它应该是((MainActivity)getActivity()).callFragmentdiary
。
另外,在onCreate
方法中获得FragmentManager
可能是一个好主意,因为在加载/实例化类时可能不会设置片段管理器。仅当您要使用它时才创建FragmentTransaction
。
这是为啥工作? (新的MainActivity).callFragmentDiary'出了什么问题?为什么我不能创建一个'MainActivity'的对象并使用它来访问它的功能? – heathcliff
因为活动由Android Framework实例化。你不应该自己实例化它们。您正在新实例上调用方法'callFragmentDiary',而不是正在运行代码的实例。 –