Android-如何动态更改clickListener

时间:2018-06-22 19:25:41

标签: java android android-studio

所以我有一个Button数组,其中一个是正确的答案,而另外三个是不正确的。但是,对于每个问题,正确的按钮都会更改。我将如何更新我的点击监听器?似乎很简单的问题,也许我在这里看不到明确的答案...

到目前为止,这是我的代码,谢谢:

1

3 个答案:

答案 0 :(得分:3)

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

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);
            }
        }
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

动态实现此目标的另一种方法是,如果您不想创建自定义Listener ,则使用Tag方法来跟踪正确的按钮,如下所示:

answerButtons[newQuestion(questionTextView,answerButtons)].setTag("CORRECT");

for(Button button : answerButtons){
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(v.getTag()!=null && v.toString().equals("CORRECT")){
               correctDialog(questionTextView,answerButtons);
            }else{
               wrongDialog(questionTextView, answerButtons);
            }
        }
    });
}