2012-12-23 17 views
1

代碼片段錯誤,設置的EditText在Java代碼私有字段將導致以下

公共類RelativeActivity擴展活動 {

// private Button ok_btn = (Button) findViewById(R.id.ok); 
// private EditText edit = (EditText) findViewById(R.id.editText01); 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_relative); 

    Button ok_btn = (Button) findViewById(R.id.ok); 
    final EditText edit = (EditText)findViewById(R.id.editText01); 
    ok_btn.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      Toast.makeText(getApplicationContext(), edit.getText().toString(), Toast.LENGTH_LONG).show(); 

     } 
    }); 
} 

這是正確的,但是如果我設定的都該實例Button,ok_btn和EditText的這個實例,編輯爲私有字段,如代碼頂部的註釋行所示,這會導致錯誤,爲什麼? 在此先感謝,

回答

0
// private Button ok_btn = (Button) findViewById(R.id.ok); 
// private EditText edit = (EditText) findViewById(R.id.editText01); 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    // your code.. 

這個代碼在運行時做出錯誤,因爲你設置的佈局當前窗口(活動)之前嘗試兩種接入按鈕和EditText上。並在默認活動佈局這些到Ui元素不退出,這就是爲什麼你得到錯誤。

解決方案,如果你只是申報活動onCreate方法之前,所有的UI元素的設置中,用戶界面元素已添加活動佈局後初始化所有的UI元素。

例如在你的代碼:

public class RelativeActivity extends Activity { 

//****************** DECLARE ALL UI ELEMENTS HERE ****************/ 
private Button ok_btn; 
private EditText edit; 


@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_relative); 

//***************** INITIALIZE ALL ELEMENTS HERE AFTER setContentView 


    ok_btn = (Button) findViewById(R.id.ok); 
    edit = (EditText)findViewById(R.id.editText01); 

    ok_btn.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      Toast.makeText(getApplicationContext(), 
      edit.getText().toString(), Toast.LENGTH_LONG).show(); 

     } 
    }); 
} 
+1

不勝感激,美觀大方,精巧。 –

3

由於您在致電setContentView()之前嘗試使用findViewById(),因此出現錯誤。如果你使用:

private Button ok_btn; 
private EditText edit; 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_relative); 

    ok_btn = (Button) findViewById(R.id.ok); 
    edit = (EditText)findViewById(R.id.editText01); 
    ok_btn.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      Toast.makeText(getApplicationContext(), edit.getText().toString(), Toast.LENGTH_LONG).show(); 

     } 
    }); 
} 

爲你調用setContentView()後打電話findViewById()你不會得到一個錯誤。

+0

謝謝你,這是有道理的, –

相關問題