我有一个公共静态侦听器数组列表,在每个活动中,我都会向列表中添加一个新侦听器,当我迭代调用列表中的每个侦听器时,没有一个活动收到调用,有人可以告诉我吗我做错了什么?
(抱歉英语不好...)
听众
MealsListListener.class
public interface MealsListListener {
void onMealAdded(Meal meal, int babyID);
void onMealRemoved(Meal meal);
void onMealChanged(Meal meal);
}
数组列表
MealListListeners.class
public class MealListListeners {
ArrayList<MealsListListener> mealsListListeners = new ArrayList<>();
public MealListListeners() {
}
public void addMealsListListener(MealsListListener mealsListListener) {
this.mealsListListeners.add(mealsListListener);
}
public void onMealAdded(Meal meal, int babyID) {
for (MealsListListener mealsListListener : mealsListListeners) {
mealsListListener.onMealAdded(meal, babyID);
}
}
public void onMealRemoved(Meal meal){
for (MealsListListener mealsListListener : mealsListListeners) {
mealsListListener.onMealChanged(meal);
}
}
public void onMealChanged(Meal meal) {
for (MealsListListener mealsListListener : mealsListListeners) {
mealsListListener.onMealRemoved(meal);
}
}
}
活动
MainActivity.class
public class MainActivity extends AppCompatActivity {
public static MealListListeners mealListListeners = new MealListListeners();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mealListListeners.addMealsListListener(new MealsListListener() {
@Override
public void onMealAdded(Meal meal, int babyID) {
Toast.makeText(getApplicationContext(), "onMealAdded", Toast.LENGTH_SHORT).show();
}
@Override
public void onMealRemoved(Meal meal) {
Toast.makeText(getApplicationContext(), "onMealRemoved", Toast.LENGTH_SHORT).show();
}
@Override
public void onMealChanged(Meal meal) {
Toast.makeText(getApplicationContext(), "onMealChanged", Toast.LENGTH_SHORT).show();
}
});
}
}
来自
DialogMeal.class
中的对话框的调用
public class DialogMeal extends BottomSheetDialog {
public DialogMeal(@NonNull Context context, Meal meal) {
super(context);
addNewMeal(meal);
saveMealChanges(meal);
removeMealAction(meal);
}
public void addNewMeal(Meal meal) {
MainActivity.mealListListeners.onMealAdded(meal, 0);
}
private void saveMealChanges(Meal meal) {
MainActivity.mealListListeners.onMealChanged(meal);
}
private void removeMealAction(Meal meal) {
MainActivity.mealListListeners.onMealRemoved(meal);
}
}
处理事件时,您在侦听器上调用了错误的方法
public void onMealAdded(Meal meal, int babyID) {
for (MealsListListener mealsListListener : mealsListListeners) {
mealsListListener.onMealAdded(meal, babyID); // correct
}
}
public void onMealRemoved(Meal meal){
for (MealsListListener mealsListListener : mealsListListeners) {
mealsListListener.onMealChanged(meal); // should be onMealRemoved
}
}
public void onMealChanged(Meal meal) {
for (MealsListListener mealsListListener : mealsListListeners) {
mealsListListener.onMealRemoved(meal); // should be onMealChanged
}
}