应用程序因以下消息而崩溃:
android.support.v4.app.Fragment$InstantiationException:无法实例化片段blabla.WelcomDialog:确保类名存在,是公共的,并且有一个公共的空构造函数
它在我安装后第一次启动应用程序时在模拟器(运行 android 2.2)上崩溃。当应用程序启动时,它会显示一个启动画面。如果是第一次,则在启动画面显示时进行一些后台初始化,否则,启动画面持续 1.5 秒。当启动屏幕活动结束时,它会调用主应用程序活动。最后,在主要活动 onCreate() 方法中,我显示了 WelcomeDialog:
new WelcomeDialog( this ).show( getSupportFragmentManager(), "");
欢迎对话框类如下:
class WelcomeDialog extends SherlockDialogFragment//DialogFragment
{
MyApp activity;
/**
*
*/
public WelcomeDialog( MyApp activity )
{
super();
this.activity = activity;
}
@Override
public void onCreate( Bundle savedInstanceState )
{
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
final View v = inflater.inflate( R.layout.welcome, container, false );
Button btn;
btn = (Button)v.findViewById( R.id.close_btn );
btn.setOnClickListener( new View.OnClickListener()
{
@Override
public void onClick( View view )
{
dismiss();
}
});
getDialog().getWindow().setBackgroundDrawableResource( R.color.transparent );
getDialog().getWindow().clearFlags( WindowManager.LayoutParams.FLAG_DIM_BEHIND );
getDialog().setCanceledOnTouchOutside( false );
return v;
}
/*
*
*/
public WelcomeDialog Show( FragmentManager fm )
{
show( fm, "" );
return this;
}
}
现在,我知道对话框片段应该只有一个没有参数的构造函数,并且您必须使用 Bundle 对象传递参数(并且有一个 getActivity() 方法来检索活动),但困扰我的是应用程序首次启动。即使片段之前从未实例化过(因此无法重新附加),它怎么可能给出该异常? 我想澄清一下,这个错误只发生过一次(我出于调试目的多次安装/删除了该应用程序,但从未发生过)。 另一个问题是:我需要将欢迎对话框放在单独的文件中吗?谢谢你。