0

私はアンドロイドに慣れていないので、誰でもこの単純なものを手伝ってくれますが、この実行プロセスを認識できません。スピナーを介して動的に結果を取得する必要がありますが、ここではスピナーは実行時にのみ実行されます(スピナーをクリックせずに)申し訳ありませんこの質問をするために、私はこれを解決することができません... :(

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.loanpayment);
    try {
        et1 = (EditText) findViewById(R.id.et1);
        et2 = (EditText) findViewById(R.id.et2);
        et3 = (EditText) findViewById(R.id.et3);
        ans = (TextView) findViewById(R.id.editText1);
        b1 = (Button) findViewById(R.id.button1);
        b2 = (Button) findViewById(R.id.button2);
        s = (Spinner) findViewById(R.id.spin);


    }
    catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
    ArrayAdapter<String> a = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, values);
    a.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    s.setAdapter(a);

    s.setOnItemSelectedListener(new OnItemSelectedListener() {


        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {

            // TODO Auto-generated method stub
            String item = parent.getItemAtPosition(position).toString();
            if(item.equals("Yearly")) {
                Pattern p = Pattern.compile("([0-9 .]*)");

                if (et1.getText().toString().trim().length() > 0 && et2.getText().toString().trim().length() > 0 && et3.getText().toString().trim().length() > 0) {
                    Matcher m = p.matcher(et1.getText().toString().trim());
                    Matcher m1 = p.matcher(et2.getText().toString().trim());
                    Matcher m2 = p.matcher(et3.getText().toString().trim());

                    if (m.matches() && m1.matches() && m2.matches()) {

                        amount = Float.valueOf(et1.getText().toString());
                        interest = Float.valueOf(et2.getText().toString());
                        year = Float.valueOf(et3.getText().toString());
                        s1 = interest/100;
                        s2 = year;
                        ans1 = s1 * amount;
                        ans2 = (float) (1-Math.pow((1+s1), -s2));
                        tot = (float) Math.round(ans1/ans2);
                        String an = Float.toString(tot);
                        ans.setText("Amount to Pay=" +an);

                    } 
                     else {
                        Toast.makeText(getApplicationContext(),
                                "Incorrect value", Toast.LENGTH_SHORT)
                                .show();
                    }
4

2 に答える 2

0

spinner.setOnItemClickListener を設定するとすぐに、レイアウトが配置されるとすぐに呼び出されます。フラグを手動で設定して処理する必要があります

于 2013-03-15T15:22:25.007 に答える
0

私が正しく理解していれば、このSO Answerはあなたの問題を解決するはずです

@Samがコメントで述べているように

... スピナーは、デフォルト値をロードするときに onItemSelected() を呼び出します。

したがって、私の理解ではonItemSelected()、がロードされたときに呼び出されるSpinnerため、フラグを使用して、最初にロードされたことを関数に知らせ、ロジックをスキップする必要があります。次に、フラグを変更して、ユーザーがアイテムを選択した後に関数がロジックを続行するようにします。お役に立てれば。

ノート

これに関するドキュメントにはまだ何も見つかりませんでしたが、関数をステップ実行して、これが発生することを確認しました。

于 2013-03-15T15:20:36.333 に答える