监听器的ArrayList未响应呼叫

问题描述 投票:0回答:1

我有一个公共静态侦听器数组列表,在每个活动中,我都会向列表中添加一个新侦听器,当我迭代调用列表中的每个侦听器时,没有一个活动收到调用,有人可以告诉我吗我做错了什么?

(抱歉英语不好...)

听众

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

 }
java android arrays interface
1个回答
0
投票

处理事件时,您在侦听器上调用了错误的方法

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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.