1

以下のコード スニペット、

public class RelativeActivity extends Activity {

//  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();

        }
    });
}

これは正しいですが、コードの上部にあるコメントアウトされた行に示されているように、このボタンのインスタンス、ok_btn、および EditText のこのインスタンスの両方をプライベート フィールドとして設定すると、エラーが発生します。なぜですか? 前もって感謝します、

4

2 に答える 2

3

findViewById()を呼び出す前に使用しようとすると、エラーが発生しますsetContentView()。使用する場合:

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();

        }
    });
}

findViewById()を呼び出した後に呼び出すため、エラーは発生しませんsetContentView()

于 2012-12-23T16:37:02.117 に答える
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..

現在のウィンドウ (アクティビティ) のレイアウトを設定する前に、Button と EditText の 2 つのアクセスを試みているため、このコードは実行時にエラーになります。デフォルトのアクティビティ レイアウトでは、これらの Ui 要素は終了しないため、エラーが発生します。

Activity の onCreate メソッドの前にすべての UI 要素を宣言し、Ui 要素を追加した Activity レイアウトを設定した後にすべての 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();

        }
    });
}
于 2012-12-23T16:38:45.030 に答える