【发布时间】:2020-04-13 14:49:35
【问题描述】:
我正在重构我的一个 Android 应用程序。在最初的版本中,我在主活动中实例化了同一个类的八个对象,并在它们上分别设置了侦听器。对于每个实例,我都初始化了一个单独的变量。 现在我想将对象添加到一个数组并在循环中设置监听器,但是当我测试应用程序时,监听器只设置在最后一个实例上。
mObjects = new ArrayList<>();
mObjects.add(createNewObject(R.id.objectPlaceholder1, R.id.objectProgressTextView));
mObjects.add(createNewObject(R.id.objectPlaceholder2, R.id.object2ProgressTextView));
mObjects.add(createNewObject(R.id.objectPlaceholder3, R.id.object3ProgressTextView));
mObjects.add(createNewObject(R.id.objectPlaceholder4, R.id.object4ProgressTextView));
mObjects.add(createNewObject(R.id.objectPlaceholder5, R.id.object5ProgressTextView));
mObjects.add(createNewObject(R.id.objectPlaceholder6, R.id.object6ProgressTextView));
mObjects.add(createNewObject(R.id.objectPlaceholder7, R.id.object7ProgressTextView));
mObjects.add(createNewObject(R.id.objectPlaceholder8, R.id.object8ProgressTextView));
for (int i = 0; i < mObjects.size(); ++i) {
object = mObjects.get(i);
object.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
countDownEditText = findViewById(R.id.countdownEditText);
if (countDownEditText.getText().toString().equals("")) {
showToastText(R.string.count_down_time);
return;
}
if (object.checkReadyForAction()) {
countDownTime = Integer.parseInt(countDownEditText.getText().toString());
object.startCountDown(countDownTime);
} else {
showToastText(R.string.action_not_ready);
}
}
});
object.image.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
object.reset();
return true;
}
});
}
【问题讨论】:
-
请提供您尝试过的代码
-
请输入代码。没有代码真的很难猜到
-
@Fantômas 你为什么改标题?我想在数组中的每个对象上设置监听器。
-
...和...它的含义是什么?您不必在标题中重复 TAGS。
标签: java android arrays object listener