将列表项添加到最喜欢的错误,不会持续状态

时间:2018-06-02 15:34:05

标签: android listview favorites

我有一种方法可以从搜索列表中添加收藏夹。

此代码允许点击列表视图并相应地调用监听器天气它是搜索列表视图或mytour Listview。

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 :(得分:0)

您正在将项目最喜欢或不喜欢的状态存储在不是持久存储的布尔变量中。关闭并重新打开应用程序时,它将不相同。

您应该将最喜欢的项目存储在SharedPreferences或SQL Database中,这些项目是持久存储。通过这种方式,您可以随时添加和删除数据,并且它将被保留。

希望这有帮助,如果您有任何疑问,请告诉我。

答案 1 :(得分:0)

我认为您正在使用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);
    }
    
  4. 这是为了保持您所需的片段不被页面更改。但是,如果您启动另一个Activity然后再返回,则可能无法保留该片段。希望有所帮助!