Android开发:从AddNewPassword页面返回后如何刷新RecyclerView?
解决从AddNewPassword返回后主界面RecyclerView刷新的问题
方法一:使用Activity Result API(推荐,适配AndroidX)
startActivityForResult已被废弃,现在用Activity Result Contract处理页面返回后的回调,能精准判断是否需要刷新。
步骤:
- 在
MainScreen中注册Activity Result Launcher - 点击添加按钮时用
launch启动页面 - 在回调中触发数据刷新
代码示例:
首先在MainScreen类中定义Launcher:
private ActivityResultLauncher<Intent> addPasswordLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == Activity.RESULT_OK) { // 重新加载最新密码数据 loadLatestPasswords(); // 替换成你获取数据的方法 // 通知适配器刷新UI yourPasswordAdapter.notifyDataSetChanged(); } } );
修改添加按钮的点击事件:
addData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainScreen.this, AddNewPassword.class); i.putExtra("id", (String) null); i.putExtra("Platform", ""); i.putExtra("User", ""); i.putExtra("password", ""); i.putExtra("boolean", false); // 用launch启动页面 addPasswordLauncher.launch(i); } });
在AddNewPassword页面完成添加后,设置返回结果:
// 保存按钮点击事件中 saveBtn.setOnClickListener(v -> { // 执行保存密码的逻辑(写入数据库等) // 通知主界面可以刷新 setResult(Activity.RESULT_OK); finish(); });
方法二:重写MainScreen的onResume方法
每次从子页面返回主界面时,onResume会被自动调用,在这里统一刷新数据。
代码示例:
@Override protected void onResume() { super.onResume(); // 重新获取最新数据 loadLatestPasswords(); // 检查适配器不为空时刷新 if (yourPasswordAdapter != null) { yourPasswordAdapter.notifyDataSetChanged(); } }
注意事项:
之前调用初始化RecyclerView方法无效,大概率是因为:
- 初始化方法没有重新从数据源(数据库/本地存储)拉取最新数据
- 没有调用适配器的
notifyDataSetChanged()方法触发UI更新
内容的提问来源于stack exchange,提问作者user20530242
相关产品推荐
相关产品推荐

