Android:当动态创建的复选框被选中时显示toast消息



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

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

,
我看到问题可能与变量(toDoCheckBox有关)我用来保存新创建的复选框实例,每次它得到动态重写,因为我创建新的复选框。因此,对于前面的复选框,为了使侦听器工作,没有指向它们的引用。(问题可能是这个或不是,我不知道肯定)即使这是问题,我也不知道如何解决它

我试过的是,在onCreate和createCheckBox方法上创建checkbox的实例,这样我就可以在这两个地方分配侦听器。

  1. onCreate()
  2. 上的createCheckbox()

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

有人可以帮助我或指导我的问题,
我想toast消息显示每个复选框

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

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

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

相关内容

  • 没有找到相关文章

最新更新