3

私の質問は、 main のメソッドの前setContentView()にコードを書くことができるかどうかです。以下のコードではbeforeを呼び出したいのですが、これによりアプリケーションがクラッシュします。の後に呼び出すと、正常に動作します。どうしてこれなの?onCreate()ActivitysetVariables()setContentView()setVariables()setContentView()

package com.oxinos.android.moc;


import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;


public class mocActivity extends Activity {
    /** Called when the activity is first created. */

    public static String prefsFile = "mocPrefs";
    SharedPreferences mocPrefs;
    public Resources res;
    public CheckBox cafesCB, barsRestCB, clothingCB, groceriesCB, miscCB;

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

        mocPrefs = getSharedPreferences(prefsFile,0);
    }

    private void setVariables(){
        res = getResources();
        cafesCB = (CheckBox) findViewById(R.id.cafesCheckBox);
        barsRestCB = (CheckBox) findViewById(R.id.barsRestCheckBox);
        clothingCB = (CheckBox) findViewById(R.id.clothingCheckBox);
        groceriesCB = (CheckBox) findViewById(R.id.groceriesCheckBox);
        miscCB = (CheckBox) findViewById(R.id.miscCheckBox);

    }
    public void submitHandler(View view){
        switch (view.getId()) {
        case R.id.submitButton:
            boolean cafes = cafesCB.isChecked();
            boolean barsRest = barsRestCB.isChecked();
            boolean clothing = clothingCB.isChecked();
            boolean groceries = groceriesCB.isChecked();
            boolean misc = miscCB.isChecked();

            SharedPreferences.Editor editor = mocPrefs.edit();

            editor.putBoolean(res.getString(R.string.cafesBool), cafes);
            editor.putBoolean(res.getString(R.string.barsRestBool), barsRest);
            editor.putBoolean(res.getString(R.string.clothingBool), clothing);
            editor.putBoolean(res.getString(R.string.groceriesBool), groceries);    
            editor.putBoolean(res.getString(R.string.miscBool), misc);
            editor.commit();
            startActivity(new Intent(this, mocActivity2.class));
            break;
        }

    }
}
4

2 に答える 2

9

まだ設定されていない、(の一部)を参照しない限り、メソッドの前に任意のコードを実行できます。setContentView()View

setVariables()メソッドはの内容を参照しているため、実行Viewできません。

于 2012-04-14T11:54:33.950 に答える
1

このsetContentView()メソッドは、XML ファイルのコンテンツを として設定します。Viewこれは で示されますActivity

setVariables()表示するものを指定する前に呼び出していますView

そのため、エラーが発生します。Viewコンパイラは、それがどこに属しているかを知りません。を使用する場合はResourceView、最初に設定する必要があります。

于 2012-04-14T12:02:45.337 に答える