Java 如何将OnClickListener放入IF语句中?

Java 如何将OnClickListener放入IF语句中?,java,android,onclicklistener,Java,Android,Onclicklistener,我是Android开发的初学者。我正在创建一个类似4张图片1个单词的游戏。我的代码尚未完成。我的问题是,我不能将OnClickListener放在IF语句中 我需要将问题随机化,所以我放置了随机生成器,然后使用if语句来表示由随机数给出的问题。我使用for循环,以便在所有游戏都玩完之前游戏不会结束。这是我的密码 主要活动: public class MainActivity extends AppCompatActivity implements View.OnClickListener{

我是Android开发的初学者。我正在创建一个类似4张图片1个单词的游戏。我的代码尚未完成。我的问题是,我不能将OnClickListener放在IF语句中

我需要将问题随机化,所以我放置了随机生成器,然后使用if语句来表示由随机数给出的问题。我使用for循环,以便在所有游戏都玩完之前游戏不会结束。这是我的密码

主要活动

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    Button btnStart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnStart = (Button) findViewById(R.id.btnStart);
        btnStart.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.btnStart:
                startActivity(new Intent(this, game.class));
                break;
        }
    }
}
public class game extends AppCompatActivity{
    EditText etAnswer;
    Button btnSubmit;
    ImageView image1;
    ImageView image2;
    ImageView image3;
    ImageView image4;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        etAnswer = (EditText) findViewById(R.id.etAnswer);
        image1 = (ImageView) findViewById(R.id.image1);
        image2 = (ImageView) findViewById(R.id.image2);
        image3 = (ImageView) findViewById(R.id.image3);
        image4 = (ImageView) findViewById(R.id.image4);
        btnSubmit = (Button) findViewById(R.id.btnSubmit);

        ArrayList<Integer> imageList = new ArrayList<>();
        imageList.add(R.drawable.andresbonifacio1);
        for (int i = 0; i >= imageList.size(); i++) {
            Random generator = new Random();
            int number = generator.nextInt(5) + 1;

            if (number == 1) {
                image1.setImageResource(R.drawable.andresbonifacio1);
                    new GameData().questionOne();
            } else if (number == 2) {
                image1.setImageResource(R.drawable.andresbonifacio1);
                        new GameData().questionTwo();
            } else if (number == 3) {
                image1.setImageResource(R.drawable.andresbonifacio1);
                        new GameData().questionThree();
            } else if (number == 4) {
                image1.setImageResource(R.drawable.andresbonifacio1);
                        new GameData().questionFour();
            } else {
                image1.setImageResource(R.drawable.andresbonifacio1);
                        new GameData().questionFive();
            }
        }
    }
}
游戏

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    Button btnStart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnStart = (Button) findViewById(R.id.btnStart);
        btnStart.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.btnStart:
                startActivity(new Intent(this, game.class));
                break;
        }
    }
}
public class game extends AppCompatActivity{
    EditText etAnswer;
    Button btnSubmit;
    ImageView image1;
    ImageView image2;
    ImageView image3;
    ImageView image4;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        etAnswer = (EditText) findViewById(R.id.etAnswer);
        image1 = (ImageView) findViewById(R.id.image1);
        image2 = (ImageView) findViewById(R.id.image2);
        image3 = (ImageView) findViewById(R.id.image3);
        image4 = (ImageView) findViewById(R.id.image4);
        btnSubmit = (Button) findViewById(R.id.btnSubmit);

        ArrayList<Integer> imageList = new ArrayList<>();
        imageList.add(R.drawable.andresbonifacio1);
        for (int i = 0; i >= imageList.size(); i++) {
            Random generator = new Random();
            int number = generator.nextInt(5) + 1;

            if (number == 1) {
                image1.setImageResource(R.drawable.andresbonifacio1);
                    new GameData().questionOne();
            } else if (number == 2) {
                image1.setImageResource(R.drawable.andresbonifacio1);
                        new GameData().questionTwo();
            } else if (number == 3) {
                image1.setImageResource(R.drawable.andresbonifacio1);
                        new GameData().questionThree();
            } else if (number == 4) {
                image1.setImageResource(R.drawable.andresbonifacio1);
                        new GameData().questionFour();
            } else {
                image1.setImageResource(R.drawable.andresbonifacio1);
                        new GameData().questionFive();
            }
        }
    }
}

为什么要将
onClickListener
放在
if-else
块中

您可以做的是将
if-else
块放入
onClickListener
中。像这样的,

youtButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
       if(..)
          ...
       else .... 
    }
});

将按钮OnClickListener设置为匿名类。请尝试以下代码:

    public class MainActivity extends AppCompatActivity{
            Button btnStart;

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                btnStart = (Button) findViewById(R.id.btnStart);
                btnStart.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //insert your condition here
                        startActivity(new Intent(this, game.class));
                    }
                });
            }


        }
希望这对你有帮助

此外,您还可以简化代码:

findViewById(R.id.btnStart).setOnClickListener(new View.OnClickListener() { ... })
更新: 您可以在启动活动后调用指定的方法,如下所示:

Intent intent = new Intent(context, game.class);
intent.putExtra("startFuncOne", true);
startActivity(intent); 
然后在游戏活动中:

if (getIntent().getBooleanExtra("startFuncOne", false)) {
   functionOne();
}

为什么要为每个问题编写一个新函数?Imagen你有数千个问题,你想拥有数千个函数,做同样的事情吗?尝试对代码进行更多的结构和组织。然后更多的人想看看它。现在很难理解你在做什么。这可能行得通,但在进行下一个活动之前,我需要先调用特定的方法,这样其他方法就不会打开。我可以这样做吗?`btnStart.setOnClickListener(new View.OnClickListener(){@Override public void onClick(View v){//假设我在我的“game.class”new game().functionOne()中有一个名为“functionOne”的函数;startActivity(new Intent(this,game.class));} });`