Я не могу удалить элемент из навигации - PullRequest
0 голосов
/ 15 марта 2020

У меня есть список элементов в навигационном представлении, которые добавляются программным способом - и я сохраняю и восстанавливаю их с помощью общих настроек, все работает нормально. Я могу удалить первый элемент - не имеет значения, какой элемент я выбрал для удаления - но когда я пытаюсь удалить второй элемент, он выдает это исключение: java .lang.IndexOutOfBoundsException: Index: 0, Size: 0

Что я могу сделать, чтобы решить эту проблему?

Это мой код:

  private void saveData() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREF_LIST_KEY, MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        Gson gson = new Gson();
        String json = gson.toJson(navItems);
        editor.putString(SHARED_PREF_LIST_KEY_ITEM, json);
        editor.apply();
    }

    private void loadData() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREF_LIST_KEY, MODE_PRIVATE);
        Gson gson = new Gson();
        String json = sharedPreferences.getString(SHARED_PREF_LIST_KEY_ITEM, null);
        Type type = new TypeToken<ArrayList<NavItem>>() {
        }.getType();
        navItems = gson.fromJson(json, type);
        if (navItems == null) {
            navItems = new ArrayList<>();
        }
    }

    private void deleteData(NavItem navItem) {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREF_LIST_KEY, MODE_PRIVATE);
        Gson gson = new Gson();
        String json = sharedPreferences.getString(SHARED_PREF_LIST_KEY_ITEM, null);
        Type type = new TypeToken<ArrayList<NavItem>>() {
        }.getType();
        navItems = gson.fromJson(json, type);
        if (navItems != null) {
            navItems.remove(navItem);
            navViewArray.removeItem(navItem);
            Toast.makeText(this, " List " + navItem.getName() + " deleted ", Toast.LENGTH_SHORT).show();

            saveData(); // save updated data to shared preferences
        }
    }

       int position = navViewArray.findItemString(checkItemTitle);
                            Toast.makeText(this, "position " + position, 
                                             Toast.LENGTH_SHORT).show();

           NavItem navItem = navItems.get(position);
            deleteData(navItem)
    public class NavViewArray {
       private List<NavItem> navItems;

       public NavViewArray() {
        navItems = new ArrayList<>();
     }

       public void addItem(NavItem navItem) {
        navItems.add(navItem);
     }


    public int findItemString(String itemName) {
        for (int i = 0; i < navItems.size(); i++) {
            NavItem navItem = navItems.get(i);
            if (itemName.equals(navItem.getName())) {
                return i;
            }
        }
        return -1;
    }

    public void removeItem(NavItem navItem) {
        navItems.remove(navItem);
    }
}

    public class NavItem {
       private String name;

       public NavItem(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof NavItem)) return false;
        NavItem navItem = (NavItem) o;
        return getName().equals(navItem.getName());
    }

    @Override
    public int hashCode() {
        return getName().hashCode();
    }

    public String getName() {
        return name;
    }
}
...