检查答案并在测验应用程序Android中获取按钮ID

时间:2019-03-19 22:13:41

标签: android

用户正在单击四个按钮之一后,我正在检查答案。我通过在每个按钮上设置标签,然后使用创建的getTag()中的onClickListener来检查单击的View的值是否等于存储在SQLite数据库中的相应正确答案,来实现这一点。

问题是我现在无法摆脱这个onClickListener, 我想有一个单独的方法checkAnswer(),在答案为true的情况下,所有逻辑都是正确的(当前,我将其中的一些放入onClickListener中)。如何确定确切的Button是按下?

    View.OnClickListener answerChecker = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (view.getTag() != null && view.getTag().equals(mCorrectAnswer)) {
                view.setBackgroundColor(getResources().getColor(R.color.colorButtonCorrectAns));
                mDetailedAnswerView.setVisibility(View.VISIBLE);
                mRatingBar.setVisibility(View.VISIBLE);
                mNextButton.setEnabled(true);
                mScore++;
                mScoreTextView.setText("Score: " + mScore);


            } else {
               view.setBackgroundColor(getResources().getColor(R.color.colorButtonWrongAns));

                }
        }
    };
    mChoice1.setOnClickListener(answerChecker);
    mChoice2.setOnClickListener(answerChecker);
    mChoice3.setOnClickListener(answerChecker);
    mChoice4.setOnClickListener(answerChecker);

1 个答案:

答案 0 :(得分:0)

个人而言,当我处理具有onclick事件的许多组件时,我会尝试将所有内容组合为一个函数。

例如,如果您有活动/片段,则可以使用以下代码

    public class SearchActivity extends AppCompatActivity implements View.OnClickListener
{

     @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentView());

        Button btn1 = findviewbyid(R.id.btn1);
        Button btn2 = findviewbyid(R.id.btn2);
        Button btn3 = findviewbyid(R.id.btn3);
        Button btn4 = findviewbyid(R.id.btn4);
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
    }


 @Override
    public void onClick(View view) {
        switch(view.getId())
        {
            case R.id.btn1:
                //will trigger when you press on first btn
                break;
            case R.id.btn2:
//will trigger when you press on the second btn
                break;
            case R.id.btn3:
                //will trigger when you press on the third btn
                break;
            case R.id.btn4:
                //will trigger when you press on the fourth btn
                break;
        }
    }
}

此行分配的每个按钮的事件功能

btn1.setOnClickListener(this);

按下该按钮将触发“全局”(活动中的View.onClickListener方法),您可以使用view.getId()功能来区分按钮