首页 > 解决方案 > 在listview android studio中实现收藏按钮

问题描述

我正在尝试从过去五天开始在 ListView 中实现最喜欢的按钮。我创建了一个 ListView,它获取当前的 textview 文本并将其保存在 ArrayList(名称)中,如果数据已经存在,则将其删除,效果很好,但是当我关闭应用程序时,ArrayList 变空我想保存数组列表在偏好中。

数组声明:

ArrayList<String> names = new ArrayList<>();

下面是代码

favoritebutton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick( View v) {
        if (!names.contains(textView_name.getText())){
            names.add((String) textView_name.getText());

            for (int i=0; i<names.size(); i++) {
                System.out.println(names.get(i));
                favoritebutton.setBackgroundResource(R.drawable.fav_checked);
            }
        }
        else {
            System.out.println(textView_name.getText() + "   is already present in the Array at index " + names.indexOf(textView_name.getText()));
            int currentIndex = names.indexOf(textView_name.getText());
            names.remove(currentIndex);
            for (int i=0; i<names.size(); i++) {
                System.out.println(names.get(i));
                favoritebutton.setBackgroundResource(R.drawable.star_off);
            }
        }
    }
});

标签: androidlistview

解决方案


每次更新后,您必须将该列表保存在首选项中,您可以使用 Gson lib 将数组列表转换为 JsonArray 并将 JsonArray 转换为 Arraylist,这将对您有所帮助...

String str = fetchFromPref();
ArrayList<String> names = covertToArrayListFromJSOnString(str);

favoritebutton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick( View v) {
        if (!names.contains(textView_name.getText())){
            names.add((String) textView_name.getText());

            for (int i=0; i<names.size(); i++) {
                System.out.println(names.get(i));
                favoritebutton.setBackgroundResource(R.drawable.fav_checked);
            }
        }
        else {
            System.out.println(textView_name.getText() + "   is already present in the Array at index " + names.indexOf(textView_name.getText()));
            int currentIndex = names.indexOf(textView_name.getText());
            names.remove(currentIndex);
            for (int i=0; i<names.size(); i++) {
                System.out.println(names.get(i));
                favoritebutton.setBackgroundResource(R.drawable.star_off);
            }

        }
        String str = convertArrayListToJson(names).toString();
        saveToPrefrences(str);
    }
});

推荐阅读