将图像URL存储在共享首选项中,并在Recyclerview中显示它们

时间:2018-04-14 22:19:04

标签: java android sharedpreferences favorites

我正在尝试添加(添加到收藏夹)功能到我的应用程序,因为我使用sharedpreferences下面的代码可以工作但是当我发送图像时我只看到我添加的最后一个图像而我相信而不是将新图像添加到我最喜欢的部分:旧页面:

这是我在arraylist中添加和删除网址的代码

  public void add(String name, String url) {
        ArrayList<Post> myfav = new ArrayList<>();
        Post post = new Post();
        post.setImgUrl(url);
        post.setName(name);
        myfav.add(post);
        TinyDB tinydb = new TinyDB(getApplicationContext());
        tinydb.putListObject("fav", myfav);
        Toast.makeText(getApplicationContext(), "added to fav", Toast.LENGTH_SHORT).show();
    }

    public void remove(String url) {
    TinyDB tinydb = new TinyDB(getApplicationContext());
    ArrayList<Post> myfavSaved;
    myfavSaved = tinydb.getListObject("fav", Post.class);
    for (int i = 0; i < myfavSaved.size(); i++) {
        if (myfavSaved.get(i).getImgUrl().equalsIgnoreCase(url)) {
            myfavSaved.remove(i);
            saveFav(myfavSaved);
        }
    }
    Toast.makeText(getApplicationContext(), "removed from fav", Toast.LENGTH_SHORT).show();
}

public void saveFav(ArrayList<Post> arrayList) {
    TinyDB tinydb = new TinyDB(getApplicationContext());
    tinydb.putListObject("fav", arrayList);
}

收藏片段:我在RecyclerView

中显示图片
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_fav, container, false);
        posts = new ArrayList<>();
        recyclerView = v.findViewById(R.id.rc);
        layoutManager = new GridLayoutManager(getActivity(), 2);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        fetchRemoteData();
        return v;
    }

    public void onSuccess(List<Post> posts) {
        if (adapter == null) {
            adapter = new MyAdapter(posts, getActivity(), new RecyclerViewClickListener() {
                @Override
                public void onClick(View view, Post post) {
                    Intent intent = new Intent(getActivity(), Pop.class);
                    intent.putExtra("img", post.getImgUrl());
                    intent.putExtra("cat", "fav");
                    if (post.getName().isEmpty()) {
                        intent.putExtra("name", "Unknown");
                    } else {
                        intent.putExtra("name", post.getName());
                    }
                    startActivity(intent);
                    getActivity().overridePendingTransition(R.anim.fadein, R.anim.fadeout);
                }
            });
            recyclerView.setAdapter(adapter);
        } else {
            adapter.getItems().clear();
            adapter.getItems().addAll(posts);
            adapter.notifyDataSetChanged();
        }
    }

    private void fetchRemoteData() {
        TinyDB tinydb = new TinyDB(getActivity());
        ArrayList<Post> myfavSaved;
        List<Post> listItems = new ArrayList<>();
        myfavSaved = tinydb.getListObject("fav", Post.class);
        for (int i = 0; i < myfavSaved.size(); i++) {
            Post item = new Post(myfavSaved.get(i).getImgUrl(), myfavSaved.get(i).getName());
            listItems.add(item);
        }
        onSuccess(listItems);
    }
}

1 个答案:

答案 0 :(得分:1)

您始终在add()(第一行)中添加新的对象列表。 相反,您必须首先检索列表对象,然后添加您最喜欢的新帖子。

试试这个:

 public void add(String name, String url) {
    //code to retrieve your arraylist stored in SharedPrefs
    TinyDB tinydb = new TinyDB(getApplicationContext());
    ArrayList<Object> postObjects = tinydb.getListObject("fav", Post.class);
    ArrayList<Post> myfav = new ArrayList<Post>();
    for(Object objs : postObjects){
        myfav.add((Post)objs);
    }
        Post post = new Post();
        post.setImgUrl(url);
        post.setName(name);
        myfav.add(post);
        tinydb.putListObject("fav", myfav);
        Toast.makeText(getApplicationContext(), "added to fav", Toast.LENGTH_SHORT).show();
 }
相关问题