You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Android列表项复制到另一Activity的列表实现笔记收藏功能

实现方案

1. 实现长按收藏逻辑(修改saved类)

你目前saved类中的长按监听是空的,我们用SharedPreferences持久化存储收藏的笔记标题列表,完成收藏逻辑,避免重启APP后收藏数据丢失:

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
        String item = listView.getItemAtPosition(position).toString();
        // 获取存储收藏的SharedPreferences实例
        SharedPreferences sp = getSharedPreferences("FavoritesPrefs", MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        // 读取已有的收藏列表,默认返回空集合
        Set<String> oldFavorites = sp.getStringSet("favorites_list", new HashSet<String>());
        // 新建集合避免直接修改系统返回的集合导致异常
        Set<String> newFavorites = new HashSet<>(oldFavorites);
        newFavorites.add(item);
        editor.putStringSet("favorites_list", newFavorites);
        editor.apply();
        Toast.makeText(saved.this, "收藏成功", Toast.LENGTH_SHORT).show();
        // 返回true表示消费长按事件,不会触发普通点击逻辑
        return true;
    }
});

2. 实现收藏页列表加载(修改favorites类)

将读取收藏列表的逻辑放在onResume中,保证每次进入页面都能加载最新的收藏数据:

public class favorites extends AppCompatActivity {
    private ArrayAdapter<String> adapter;
    private ArrayList<String> favoritesList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_favorites);
        ListView listView = findViewById(R.id.lv_favorites);
        favoritesList = new ArrayList<>();
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, favoritesList);
        listView.setAdapter(adapter);
        
        // 如果需要点击收藏的笔记也能打开详情,在这里添加和saved页一样的setOnItemClickListener即可
    }

    @Override
    protected void onResume() {
        super.onResume();
        loadFavoritesData();
    }

    private void loadFavoritesData() {
        SharedPreferences sp = getSharedPreferences("FavoritesPrefs", MODE_PRIVATE);
        Set<String> favorites = sp.getStringSet("favorites_list", new HashSet<String>());
        favoritesList.clear();
        favoritesList.addAll(favorites);
        // 可选:按笔记名称排序
        Collections.sort(favoritesList);
        adapter.notifyDataSetChanged();
    }
}

补充说明

  • 用Set<String>存储收藏列表是为了自动去重,避免重复收藏同一条笔记
  • 逻辑完全兼容你现有的存储方案,不需要修改原有笔记存储逻辑
  • 如果需要支持取消收藏,只需要在favorites页的ListView长按事件里,把对应标题从收藏集合中移除再保存即可

内容的提问来源于stack exchange,提问作者17k3eujs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 19:06:01