2016-07-27 35 views
1

我看着我的代碼,我意識到,有越來越Widget的代碼中引用的至少3種方式:我們應該如何在Android中設置小部件值?

第一個(的onCreate前):

private TextView textView= (TextView) findViewById(R.id.textView); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_layout); 
    } 

第二個(中的onCreate):

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_layout); 

     final TextView textView= (TextView) findViewById(R.id.textView); 
    } 

三酮(創建出並在設定的onCreate):

private TextView textView; 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main_layout); 

      textView= (TextView) findViewById(R.id.textView); 
     } 

這3種方法有什麼區別?我應該什麼時候使用它們?

回答

0

第一個不能保證你的小部件實際上是實例化的,它不在onCreate中。

第二個將被實例化,但它的值不能被改變,因爲它成爲一個常量是最終的。第三,它是一個全局變量,它將在onCreate中實例化,您可以在代碼的任何其他部分使用它。

0

如果您需要致電findViewById(),那麼電話應該在setContentView之後的任何地方。在之前沒有像你的第一個選擇那樣。你的第三個選項創建一個實例變量,只有在整個課程中訪問文本視圖時才使用它,否則只要在需要的地方調用findViewById即可。

1

您必須致電setContentView()致電findViewById(),因此第1種方法會給你null所有的時間。第二個和第三個與final關鍵字的例外情況相同,但這是Java feature,而不是Android的。

相關問題