Skip to main content
 首页 » 编程设计

java之Android之我将如何动态更改 clickListener

2024年06月03日20langtianya

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

到目前为止,这是我的代码,在此先感谢:

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

请您参考如下方法:

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

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)。

一种方法是让监听器成为您 Activity 中的内部类。所以你有一些东西(没有测试,试一试),比如:

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