簡體   English   中英

如何在事件監聽器的語句中調用函數?

[英]How do I call a function from within a statement in the event listener?

我一直在做一個小項目,但是在實現我的想法時遇到了問題。 我嘗試構建的應用程序是一個教育性應用程序,它會給出隨機的基本數學(+,-,*,/)問題,如果學生正確回答,它應該顯示下一個問題,否則,應該給他/她再次嘗試的機會。

我的問題專門放在最后一部分,我編寫了一個函數來顯示下一個問題,但是我不完全知道單擊按鈕時如何調用它。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;

import java.util.Random;

import static java.lang.String.valueOf;


public class MainActivity extends AppCompatActivity {
    TextView    fN;
    TextView    sN;
    TextView    oP;
    TextView    out;
    TextView    ht;
    EditText    ans;
    Button      btn;
    int answer;
    int fNum;
    int sNum;
    int opNum;
    Random r;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ht.setVisibility(View.GONE);

        final String[]    ops    = {"+","-","÷","×"};
        final String[]    pass   = {
                                    "Very good!",
                                    "Excellent!",
                                    "Nice work!",
                                    "Keep up the good work!"

        };
        final String[]    fail   = {
                                    "No. Please try again.",
                                    "Wrong. Try once more.",
                                    "Don't give up!",
                                    "No. Keep trying."
        };
        public static void nextQ() {
            //UI variables
            fN = findViewById(R.id.fN);
            sN = findViewById(R.id.sN);
            oP = findViewById(R.id.oP);
            out = findViewById(R.id.out);
            ans = findViewById(R.id.Ans);
            btn = findViewById(R.id.btn);
            //functionalities variables
            r = new Random();
            fNum = r.nextInt(9);
            sNum = r.nextInt(9);
            opNum = r.nextInt(ops.length);
            if (opNum == 0)
                answer = fNum + sNum;
            if (opNum == 1)
                answer = fNum - sNum;
            if (opNum == 2)
                answer = fNum / sNum;
            if (opNum == 3)
                answer = fNum * sNum;

            ht.setText(answer);
        }
        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                ht = findViewById(R.id.hText);



                fN.setText(fNum);
                sN.setText(sNum);
                oP.setText(ops[opNum]);

                int usrAns = Integer.parseInt(valueOf(ans.getText()));

                int rMSG   = r.nextInt(pass.length);

                if(answer == usrAns)
                    out.setText(""+pass[rMSG]);
                    nextQ();
                if(answer != usrAns)
                    out.setText(""+fail[rMSG]);
            }
            });
    }
}

嘗試放入此代碼並檢查其是否有效?

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;
import static java.lang.String.valueOf;

public class MainActivity extends AppCompatActivity {
   TextView fN;
   TextView sN;
   TextView oP;
   TextView out;
   TextView ht;
   EditText ans;
   Button btn;
   int answer;
   int fNum;
   int sNum;
   int opNum;
   Random r;


@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ht.setVisibility(View.GONE);
    btn = findViewById(R.id.btn);
    fN = findViewById(R.id.fN);
    sN = findViewById(R.id.sN);
    oP = findViewById(R.id.oP);
    out = findViewById(R.id.out);
    ans = findViewById(R.id.Ans);

    final String[] ops = {"+", "-", "÷", "×"};
    final String[] pass = {
            "Very good!",
            "Excellent!",
            "Nice work!",
            "Keep up the good work!"

    };
    final String[] fail = {
            "No. Please try again.",
            "Wrong. Try once more.",
            "Don't give up!",
            "No. Keep trying."
    };

    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            ht = findViewById(R.id.hText);


            fN.setText(fNum);
            sN.setText(sNum);
            oP.setText(ops[opNum]);

            int usrAns = Integer.parseInt(valueOf(ans.getText()));

            int rMSG = r.nextInt(pass.length);

            if (answer == usrAns)
                out.setText("" + pass[rMSG]);
            nextQ();
            if (answer != usrAns)
                out.setText("" + fail[rMSG]);
        }
    });
}

public void nextQ() {

    //functionalities variables
    r = new Random();
    fNum = r.nextInt(9);
    sNum = r.nextInt(9);
    opNum = r.nextInt(ops.length);
    if (opNum == 0)
        answer = fNum + sNum;
    if (opNum == 1)
        answer = fNum - sNum;
    if (opNum == 2)
        answer = fNum / sNum;
    if (opNum == 3)
        answer = fNum * sNum;
    ht.setText(answer);
}
}

從函數nextQ()移除static nextQ() 並將其從onCreate()刪除。 將其放在onCreate() 函數將如下所示:

onCreate(){ ...  }
public void nextQ() {
....
}

像這樣稱呼它

MainActivity.this.nextQ();

刪除以下代碼形式的nextQ()並放入onCreate()方法:

fN = findViewById(R.id.fN);
sN = findViewById(R.id.sN);
oP = findViewById(R.id.oP);
out = findViewById(R.id.out);
ans = findViewById(R.id.Ans);
btn = findViewById(R.id.btn);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM