2014-06-07 36 views
1

我搜索了但未找到答案。 我该如何做一个变量final和global。 我已经尝试过这样的:如何在Android中创建最终的全局变量

public class StartActivity extends Activity { 
    ... 
    private final Dialog dialog = new Dialog(this, android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
    ... 
} 

但我得到这个错误:

06-07 19:57:38.461: E/AndroidRuntime(13810): java.lang.RuntimeException: 
Unable to instantiate activity ComponentInfo{com.xxx.xxx/com.xxx.xxx. 
StartActivity}: java.lang.IllegalStateException: System services not available to 
Activities before onCreate() 

我不知道如何避免这种错误,因为当我尝试这样做:

public class StartActivity extends Activity { 
    ... 
    private final Dialog dialog; 
    ... 
} 

并初始化变量在onCreate()方法,我得到这个错误在Eclipse:

The blank final field dialog may not have been initialized. 
+0

你为什么需要它是最终的。删除最终修饰符。将它声明为一个实例变量 – Raghunandan

+0

我需要变量是最终的,因为我在onClick方法中使用它:'dialog.dismiss' –

+0

仍然不需要最终的修饰符。试试下面的 – Raghunandan

回答

0

删除final修饰符

public class StartActivity extends Activity { 

private Dialog dialog; // declare it as a instance variable 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.yourlayout); 
     dialog = new Dialog(this, android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
     // initialize dialog 
} 

现在你可以在onClick使用dialog

还要注意this指活动上下文,一旦被创建活动上下文可用。

0

为什么你需要onCreate实例?在onClick上实例化它。

+0

如果我的onClick实例我得到的错误:'空白最终场对话可能没有initialized.' –

+0

你并不需要把它作为最终场了,使它成为一个局部变量。 –

+0

但我也使用相同的对话框中其他函数来获取意见'dialog.findViewById(...)' –