单击 ImageButton 时,会在我的应用程序中动态创建一个复选框。
我面临的问题是 toast 消息未显示,或者假设我用于复选框的侦听器在选中复选框时显示 toast 消息仅适用于已创建的当前/最新复选框。不适用于之前创建的复选框。
问题,
我发现问题可能出在我用来保存新创建的复选框实例的变量(toDoCheckBox)上,并且每次在我创建更新的复选框时它都会被动态覆盖。因此,对于前面的复选框,没有指向它们的引用以使侦听器工作。(问题可能是这个还是不是,我不确定)即使这是问题我也不知道如何解决
我尝试的是, 在 onCreate 和 createCheckBox 方法上创建复选框的实例,以便我可以在这两个地方分配侦听器。
- 在 onCreate()
- 在 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++;
}