如何将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
相关产品推荐
相关产品推荐

