1

单击 ImageButton 时,会在我的应用程序中动态创建一个复选框。

我面临的问题是 toast 消息未显示,或者假设我用于复选框的侦听器在选中复选框时显示 toast 消息仅适用于已创建的当前/最新复选框不适用于之前创建的复选框。

问题,
我发现问题可能出在我用来保存新创建的复选框实例的变量(toDoCheckBox)上,并且每次在我创建更新的复选框时它都会被动态覆盖。因此,对于前面的复选框,没有指向它们的引用以使侦听器工作。(问题可能是这个还是不是,我不确定)即使这是问题我也不知道如何解决

我尝试的是, 在 onCreate 和 createCheckBox 方法上创建复选框的实例,以便我可以在这两个地方分配侦听器。

  1. 在 onCreate()
  2. 在 createCheckbox()

只有最新创建的复选框有效并显示吐司消息

有人可以帮助我或指导我解决问题吗,
我希望为每个复选框显示吐司消息

我只发布了可能有用的代码

  private CheckBox toDoCheckBox; 
    private EditText defaultEditText;
    private List<CheckBox> listCheckBoxes;
    private int previousViewId = 0;

 @Override  
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    this.defaultEditText = findViewById(R.id.defaultEditText);
    toDoCheckBox = new CheckBox(this);
    this.listCheckBoxes = new ArrayList<>();

    this.checkBoxListener = new View.OnClickListener(){
        @Override
        public void onClick(View view){
            if(toDoCheckBox.isChecked()){
                toDoCheckBox.setChecked(true);
                Toast.makeText(MainActivity.this,"You did a good work, keep it up!",Toast.LENGTH_SHORT).show();
            }
        }
    };
    toDoCheckBox.setOnClickListener(checkBoxListener);
}


public void createCheckBox() {

    //CREATING A CHECKBOX
    toDoCheckBox = new CheckBox(this);
    toDoCheckBox.setText(defaultEditText.getText().toString());
    toDoCheckBox.setTextSize(20);
    toDoCheckBox.setId(View.generateViewId());

    ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) defaultEditText.getLayoutParams();

    ConstraintLayout.LayoutParams newParams = new ConstraintLayout.LayoutParams(
            ConstraintLayout.LayoutParams.WRAP_CONTENT,
            ConstraintLayout.LayoutParams.WRAP_CONTENT
    );

    newParams.width = params.width;
    newParams.height = params.height;

    //Constraints
    newParams.startToStart = params.startToStart;
    newParams.endToEnd = params.endToEnd;
    newParams.topToTop = params.topToTop;
    newParams.topToBottom = params.topToBottom;

    //Margins
    newParams.leftMargin = params.leftMargin;
    newParams.topMargin = params.topMargin;
    newParams.bottomMargin = params.bottomMargin;
    newParams.rightMargin = params.rightMargin;

    constraintLayout.addView(toDoCheckBox, -1, newParams);
    previousViewId = toDoCheckBox.getId();
    defaultEditText.setVisibility(View.INVISIBLE);

    createEditText();
    toDoCheckBox.setOnClickListener(checkBoxListener);
    this.listCheckBoxes.add(toDoCheckBox);
    totalCheckBox++;

}
4

1 回答 1

0

尝试使用本地复选框对象而不是全局toDoCheckBox.

于 2021-10-07T08:34:45.510 回答