Android 以编程方式创建的按钮存在问题

Android issue with programatically created buttons

好吧,我正在尝试获取每个按钮上的文本,它在每个按钮上都正确显示了文本,但是当我尝试打印它时,它显示的是相同的文本。选项D

的文字
private void displayQuestion() {
            final ArrayList<String> options = new ArrayList<>();
            for (int i = 0; i < questions.size(); i++){
                Questions diaplayQuestion = questions.get(i);
                question.setText(diaplayQuestion.getQuestion());
                options.add(0, diaplayQuestion.getOptionA());
                options.add(1, diaplayQuestion.getOptionB());
                options.add(2, diaplayQuestion.getOptionC());
                options.add(3, diaplayQuestion.getOptionD());
                correctOption = diaplayQuestion.getCorrectOption();
            }
            for (int i = 0; i < options.size(); i++) {
                btn = new Button(GameplayActivity.this);
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                params.setMargins(10, 10, 10, 0);
                btn.setLayoutParams(params);
                btn.setText(options.get(i));
                btn.setId(i);
                linearLayout.addView(btn);
                btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        System.out.println(view.getId());
                    }
                });
            }
        }

如果您想在 View 中存储一些信息,请使用标签。来自官方文档:

Unlike IDs, tags are not used to identify views. Tags are essentially an extra piece of information that can be associated with a view. They are most often used as a convenience to store data related to views in the views themselves rather than by putting them in a separate structure.

所以在你的情况下它会是这样的:

btn = new Button(GameplayActivity.this);
...
btn.setTag(options.get(i)); // I assume that value is String
...
btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        System.out.println((String) view.getTag());
    }
});