为了账号安全,请及时绑定邮箱和手机立即绑定

Android-我将如何动态更改clickListener

Android-我将如何动态更改clickListener

浮云间 2021-04-07 12:14:55
所以我有一个按钮数组,其中一个是正确的答案,而另外三个是不正确的。但是,对于每个问题,正确的按钮都会更改。我将如何更新我的点击监听器?似乎很简单的问题,也许我在这里看不到明确的答案...到目前为止,这是我的代码,在此先感谢:int correctIndex=newQuestion(questionTextView,answerButtons);//CREATES A NEW QUESTION and returns the correct index (0-3);answerButtons[correctIndex].setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        correctDialog(questionTextView,answerButtons);    }});for (int i = 0; i < 4; i++) {    final int j = i;    if (j != correctIndex) {        answerButtons[j].setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                wrongDialog(questionTextView, answerButtons);            }        });    }}
查看完整描述

2 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

创建一个通用侦听器,您可以将其添加到所有按钮,并在该侦听器内处理根据需要确定正确的逻辑。例如:


class YourListener implements View.OnClickListener {


    private int correctButtonId;


    public YourListener(int correctButtonId) {

        this.correctButtonId = correctButtonId;

    }


   @Override

    public void onClick(View v) {

        if (v.getId() == correctButtonId) {

            // do stuff

        } else {

            // do other stuff

        }

    }

}

然后,您可以将所有n按钮设置为具有该侦听器,并可以从侦听器外部根据需要设置正确按钮的ID。



// this is the id of the button that is correct, where x represents its index, which you know ahead of time

int id = answerButtons[x].getId();


for (int i = 0; i < 4; i++) {

     answerButtons[i].setOnClickListener(new YourListener(id));

}

编辑以回答:如何correctDialog从侦听器内部调用方法(例如,在您的情况下)。


一种方法是使侦听器成为您活动中的内部类。因此,您有以下内容(未经测试,请尝试一下):


public class MainActivity extends AppCompatActivity {


    private class YourListener implements View.OnClickListener {

        private TextView textView;

        private Button[] buttons;

        private int correctButtonId;

        public YourListener(TextView textView, Button[] buttons, int correctButtonId) {

            this.textView = textView;

            this.buttons = buttons;

            this.correctButtonId = correctButtonId;

        }


        @Override

        public void onClick(View v) {

            if (v.getId() == correctButtonId) {

                MainActivity.this.correctDialog(textView, buttons);

            } else {

                MainActivity.this.wrongDialog(textView, buttons);

            }

        }

    }

}


查看完整回答
反对 回复 2021-04-21
?
呼如林

TA贡献1798条经验 获得超3个赞

我将为所有按钮设置相同的clickListener,然后将逻辑移到那里。只需检查数组中按钮的索引是否与正确答案的索引相同,而无需更新clickListener或设置不同。


查看完整回答
反对 回复 2021-04-21
  • 2 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信