首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android -我该如何动态更改clickListener?

Android -我该如何动态更改clickListener?
EN

Stack Overflow用户
提问于 2018-06-23 03:25:41
回答 2查看 108关注 0票数 1

所以我有一个按钮数组,其中一个是正确的答案,而其他三个是错误的。然而,在每个问题上,正确的按钮都会发生变化。我该如何更新我的点击监听器呢?这似乎是一个足够简单的问题,也许我只是在这里看不到明确的答案…

以下是我到目前为止的代码,提前感谢:

代码语言:javascript
复制
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);
            }
        });
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-23 03:35:06

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

代码语言:javascript
复制
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。

比如

代码语言:javascript
复制
// 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 )。

一种方法是使监听器成为活动中的内部类。所以你有一些东西(未测试,试一试)如下:

代码语言:javascript
复制
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);
            }
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2018-06-23 03:35:57

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50994464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档