Android应用程序-奇怪的实例化异常

Android应用程序-奇怪的实例化异常,android,android-support-library,dialogfragment,instantiationexception,Android,Android Support Library,Dialogfragment,Instantiationexception,应用程序因以下消息而崩溃: android.support.v4.app.Fragment$实例化异常:无法 实例化片段blabla.WelcomDialog:确保类名存在, 是公共的,并且具有公共的空构造函数 安装后我第一次启动应用程序时,它在模拟器(运行android 2.2)上崩溃。当应用程序启动时,它确实会显示一个启动屏幕。如果是第一次,则在显示初始屏幕时进行一些后台初始化,否则,初始屏幕将持续1.5秒。当启动屏幕活动结束时,它调用主应用程序活动。在主要活动onCreate()方法中,最

应用程序因以下消息而崩溃:

android.support.v4.app.Fragment$实例化异常:无法 实例化片段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()方法来检索活动),但让我烦恼的是,应用程序是第一次启动的。即使之前从未实例化过片段,它如何可能给出该异常(因此不可能重新附加)? 我想澄清的是,这个错误只发生过一次(我为了调试目的多次安装/删除应用程序,但从未发生过)。 另一个问题是:是否需要将欢迎对话框放在单独的文件中?
谢谢。

片段不能有构造函数。这是因为FragmentManager如何实例化它们。我建议您完全删除构造函数并重写onAttach()方法:

此外,片段类必须是公共的。
@Override
public void onAttach(Activity ac){
    super.onAttach(ac);
    this.activity = ac;
}