0

私はコーディングが初めてで、知識に少し不安があるので、簡単なことを見落としていたら許してください。しかし、私は答えを2時間探していました.

私のクラスの 1 つは、ユーザーが身長と体重を入力できるようにし、BMI (Body Mass Index) を返すようにします。問題は、計算を実行して TextView に表示するボタンをクリックしても、何も起こらないことです。LogCat から表示される唯一のエラーはgetCursorCapsMode on inactive InputConnection. このエラーは、のnextボタンを使用してsoftkeyboardEditText フィールド間を移動する場合にのみ表示されるため、フィールド間を手動で移動してもこのエラーが発生しない場合でも結果が得られないため、これが関連しているとは考えていません。情報があれば、この問題についてもお気軽にご相談ください。

これは、アイテムの ID を除いて、BMI Android 開発チュートリアルからの複製コードですが、チュートリアルはエミュレーターに読み込まれると完全に機能します。私のコードは次のとおりです。

public class FuncConverter extends DashMenuActivity {


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

    Spinner converter_spinner = (Spinner) findViewById(R.id.converter_spinner);
    ArrayAdapter<CharSequence> converter_adapter = ArrayAdapter.createFromResource(
            this, R.array.converter_array, android.R.layout.simple_spinner_item);

    converter_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        converter_spinner.setAdapter(converter_adapter);

}


public void calcClick (View view) {

    if (view.getId() == R.id.convert_btn_calc) {

        EditText weight_edit = (EditText) findViewById(R.id.weight_edit);
        EditText height_edit = (EditText) findViewById(R.id.height_edit);
        TextView bmi_text = (TextView) findViewById(R.id.bmi_text);

        float weight = Float.parseFloat(weight_edit.getText().toString());
        float height = Float.parseFloat(height_edit.getText().toString());

        float bmiValue = calculateBMI (weight, height);
        String bmiCalc = interpretBMI (bmiValue);

        bmi_text.setText(bmiValue + " - " + bmiCalc); 

    }

}


private float calculateBMI (float weight, float height) {
    return (float) (weight / (height * height));
}

private String interpretBMI(float bmiValue) {
    if (bmiValue < 16) {
        return "Severley Underweight";
    } else if (bmiValue < 18.5) {
        return "Underweight";
    } else if (bmiValue < 25) {
        return "Healthy weight";
    } else if (bmiValue < 30) {
        return "Overweight";
    } else {
        return "Obese";
    }
}}  
4

1 に答える 1

0

クリックをトリガーして計算を行う方法がわからないため、明確に答えるのは非常に困難です。しかし、私が言えることは、あなたのxmlのようにcalcClick(View)定義されています。onClick=calcClickこれが本当なら、間違った方法で情報を取得しています。

public class FuncConverter extends DashMenuActivity {
EditText weight_edit;
EditText height_edit;
TextView bmi_text;

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

    Spinner converter_spinner = (Spinner) findViewById(R.id.converter_spinner);
    ArrayAdapter<CharSequence> converter_adapter = ArrayAdapter.createFromResource(
        this, R.array.converter_array, android.R.layout.simple_spinner_item);

    converter_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    converter_spinner.setAdapter(converter_adapter);

    //Moved these bad boys here for you instead
    weight_edit = (EditText) findViewById(R.id.weight_edit);
    height_edit = (EditText) findViewById(R.id.height_edit);
    bmi_text = (TextView) findViewById(R.id.bmi_text);

}


public void calcClick (View view) {

if (view.getId() == R.id.convert_btn_calc) { //dont't think you need this check to be honest



    float weight = Float.parseFloat(weight_edit.getText().toString());
    float height = Float.parseFloat(height_edit.getText().toString());

    float bmiValue = calculateBMI (weight, height);
    String bmiCalc = interpretBMI (bmiValue);

    bmi_text.setText(bmiValue + " - " + bmiCalc); 

    }

}

私が行ったのは、EditTextTextViewをグローバルとして移動しただけで、 でアクセスできるようになりましたcalcClick(View)。私が正しければ、それが機能しなかった理由は、少なくともあなたの場合、の外部の xml からEditTextおよびTextViewビューにアクセスできないためです。onCreate()渡されるView引数は、実際にはボタンまたはイベントをトリガーしているものです。うまくいけば、それは理にかなっています。View viewドキュメントルートではなく、クリックしてこれ(Button)viewをトリガーするものは何でもそうです。

于 2012-07-22T06:10:51.203 に答える