android ArrayList of listeners not respondind to a call [已关闭]

u0njafvf  于 2024-01-04  发布在  Android
关注(0)|答案(1)|浏览(122)

**已关闭。**此问题需要debugging details。目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答问题。
昨天就关门了。
Improve this question

(无法删除此问题...请不要介意错误的问题)

我有一个侦听器的公共静态数组列表,在每个活动中,我都在列表中添加一个新的侦听器,当我迭代调用列表中的每个侦听器时,没有一个活动得到remove调用,有人能告诉我我做错了什么吗?
(很抱歉英语不好...)
监听程序MealsListListener.class

  1. public interface MealsListListener {
  2. void onMealAdded(Meal meal, int babyID);
  3. void onMealRemoved(Meal meal);
  4. void onMealChanged(Meal meal);
  5. }

字符串
数组列表MealListListeners.class

  1. public class MealListListeners {
  2. ArrayList<MealsListListener> mealsListListeners = new ArrayList<>();
  3. public MealListListeners() {
  4. }
  5. public void addMealsListListener(MealsListListener mealsListListener) {
  6. this.mealsListListeners.add(mealsListListener);
  7. }
  8. public void onMealAdded(Meal meal, int babyID) {
  9. for (MealsListListener mealsListListener : mealsListListeners) {
  10. mealsListListener.onMealAdded(meal, babyID);
  11. }
  12. }
  13. public void onMealRemoved(Meal meal){
  14. for (MealsListListener mealsListListener : mealsListListeners) {
  15. mealsListListener.onMealChanged(meal);
  16. }
  17. }
  18. public void onMealChanged(Meal meal) {
  19. for (MealsListListener mealsListListener : mealsListListeners) {
  20. mealsListListener.onMealRemoved(meal);
  21. }
  22. }
  23. }


活动MainActivity.class

  1. public class MainActivity extends AppCompatActivity {
  2. public static MealListListeners mealListListeners = new MealListListeners();
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. mealListListeners.addMealsListListener(new MealsListListener() {
  8. @Override
  9. public void onMealAdded(Meal meal, int babyID) {
  10. Toast.makeText(getApplicationContext(), "onMealAdded", Toast.LENGTH_SHORT).show();
  11. }
  12. @Override
  13. public void onMealRemoved(Meal meal) {
  14. Toast.makeText(getApplicationContext(), "onMealRemoved", Toast.LENGTH_SHORT).show();
  15. }
  16. @Override
  17. public void onMealChanged(Meal meal) {
  18. Toast.makeText(getApplicationContext(), "onMealChanged", Toast.LENGTH_SHORT).show();
  19. }
  20. });
  21. }
  22. }


DialogMeal.class中的对话框调用

  1. public class DialogMeal extends BottomSheetDialog {
  2. public DialogMeal(@NonNull Context context, Meal meal) {
  3. super(context);
  4. addNewMeal(meal);
  5. saveMealChanges(meal);
  6. removeMealAction(meal);
  7. }
  8. public void addNewMeal(Meal meal) {
  9. MainActivity.mealListListeners.onMealAdded(meal, 0);
  10. }
  11. private void saveMealChanges(Meal meal) {
  12. MainActivity.mealListListeners.onMealChanged(meal);
  13. }
  14. private void removeMealAction(Meal meal) {
  15. MainActivity.mealListListeners.onMealRemoved(meal);
  16. }
  17. }

nhjlsmyf

nhjlsmyf1#

当处理事件时,您调用了错误的方法

  1. public void onMealAdded(Meal meal, int babyID) {
  2. for (MealsListListener mealsListListener : mealsListListeners) {
  3. mealsListListener.onMealAdded(meal, babyID); // correct
  4. }
  5. }
  6. public void onMealRemoved(Meal meal){
  7. for (MealsListListener mealsListListener : mealsListListeners) {
  8. mealsListListener.onMealChanged(meal); // should be onMealRemoved
  9. }
  10. }
  11. public void onMealChanged(Meal meal) {
  12. for (MealsListListener mealsListListener : mealsListListeners) {
  13. mealsListListener.onMealRemoved(meal); // should be onMealChanged
  14. }
  15. }

字符串

展开查看全部

相关问题