Добавление элементов списка в избранное сообщение об ошибке, не сохраняется состояние - PullRequest
0 голосов
/ 02 июня 2018

У меня есть способ добавить избранное из списка поиска.

Этот код позволяет нажимать на просмотр списка и вызывать прослушиватель соответственно, если это поиск в просмотре списка или просмотр списка просмотра mytour.

holder.imgaddFavourite.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (tourList.get(position).getFav().equalsIgnoreCase("0")) {
                                              listener.onFavourited(tourList.get(position), true);
                        holder.imgaddFavourite.setImageResource(R.drawable.faved);
                    } else {
                        listener.onFavourited(tourList.get(position), false);
                        holder.imgFavourite.setImageResource(R.drawable.not_faved);
                    }
                }
        });

Ниже приведен код для mytourList, который отлично работает:

@Override
    public void onFavourited(final Tour tour, final boolean fav) {
        new SetFavourite(new SetFavourite.OnFavouriteSet() {
            @Override
            public void onFavouriteSet(Boolean response) {
                int index = listTour.indexOf(tour);
                tour.setFav(fav ? "1" : "0");
                listTour.set(index, tour);
            }
        }, fav).execute(tour.getId(), application.getUser().getUid());
    }

Этот код сохраняется в избранном состоянии и не вызывает проблем.

Ниже приведен мой код для добавления избранного в список элементов поиска.

public void onFavourited(final Tour tour, final boolean fav) {

int index = searchOptions.getSearchedTours().indexOf(tour);
tour.setFav(fav ? "1" : "0");
searchOptions.getSearchedTours().get(index).setFav(fav ? "1" : "0");
searchOptions.getSearchedTours().set(index, tour);
}

Я могу нажать и добавить егов избранное, но если я открою другую вкладку и снова открою этот список, состояние будет потеряно.Я думаю, это потому, что это не спасает государство в глобальном масштабе.Я искал похожие ответы, но ни один из них не помог.Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Я думаю, что вы используете ViewPager для обработки фрагментов и всегда создаете новый фрагмент при изменении страницы.Поэтому государство не может быть сохранено.Попробуйте следующий метод в адаптере ViewPager:

  1. Добавьте переменную, чтобы сохранить нужный фрагмент.

    SearchTourFragment searchTourFragment = null;
    
  2. В getItem () создайтенужный фрагмент только тогда, когда он равен нулю.

    if(searchTourFragment == null){
        searchTourFragment = SearchTourFragment.newInstance();
    }
    return searchTourFragment;
    
  3. Не удаляйте нужный фрагмент с помощью переопределения destroyItem ().

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        if(position != POSITION_OF_SEARCHTOURFRAGMENT) container.removeView((View)object);
    }
    

Это пытается сохранить нужный фрагмент от изменения страницы.Но если вы начнете другое действие, а затем вернетесь назад, фрагмент может не сохраниться.Надеюсь, это поможет!

0 голосов
/ 02 июня 2018

Вы сохраняете состояние, является ли элемент избранным или нет в логической переменной, которая не является постоянным хранилищем.Это не будет то же самое при закрытии и повторном открытии приложения.

Вы должны хранить избранные элементы в SharedPreferences или в базе данных SQL, которые являются постоянным хранилищем.Таким образом, вы можете добавлять и удалять данные в любое время, и они будут сохранены.

Надеюсь, это поможет, если у вас есть какие-либо сомнения, дайте мне знать.

...