应用程序崩溃,消息如下:
android.support.v4.app。Fragment$InstantiationException: cannot to实例化片段blabla。确保类名存在,public,并且有一个public
的空构造函数。
安装后第一次启动应用程序时,模拟器(运行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()方法来检索活动),但困扰我的是应用程序是第一次启动。它是如何可能的,它给出了异常,即使片段从未实例化之前(所以不重新连接是可能的)?我想说清楚,这个错误只发生过一次(我安装/删除了很多次应用程序的调试目的,它从未发生过)。另一个问题是:我是否需要将欢迎对话框放在一个单独的文件中?谢谢你。
Fragments不能有构造函数。这是因为FragmentManager实例化它们的方式。我建议您完全删除构造函数并重写onAttach()方法:
@Override
public void onAttach(Activity ac){
super.onAttach(ac);
this.activity = ac;
}