Android中从一个Activity返回上一个Activity数据刷新

在Android Studio中,当使用ListView显示数据并点击跳转到另一个Activity进行修改后,返回原始Activity时数据未实时更新。问题在于finish()方法只结束当前Activity,未触发数据刷新。解决方法是在原Activity的onResume()方法中调用初始化函数,确保每次返回时数据自动更新。通过这种方法,修改后的数据在返回时能够正确显示。

项目场景:

在Android Studio中使用Listview显示数据,并点击item后跳转到另一个Activity进行数据的修改编辑,点击返回键后返回到上一个Activity,同时数据进行更新显示。

问题描述

在进行修改后,返回上一个Activity之后,数据没有更新,还是原来未修改的数据,需要返回再次返回后重新进入该Activity之后,数据才可以更新显示。

原因分析:

在修改界面修改数据之后,在点击返回时,程序只是通过finish()结束了当前的activity,对于上一个activity来说,数据并没有进行更新,还是之前未修改过的数据。

解决方案:

第一个Activity中原本的代码如下:

public class ManageActivity extends BaseActivity {
    @BindView(R.id.rl_back)
    RelativeLayout rlBack;
    @BindView(R.id.tv_title)
    TextView tvTitle;
    @BindView(R.id.lv_data)//listview
    ListView lvData;
    DengjiAdapter dengjiAdapter;//适配器

    Dengji dengji;

    @Override
    protected int getLayoutId() {
        return R.layout.tab_guihua;
    }

    @Override
    protected void init() {
        dengji = (Dengji) getIntent().getSerializableExtra("detail");
        tvTitle.setText("查询物品");
        rlBack.setOnClickListener(new View.OnClickListener() {//返回首页
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        try {
            List<Dengji> dengjiList = App.dbManager.findAll(Dengji.class);
            List<Dengji> dengj = new ArrayList<>();
            if (dengjiList != null) {
                for (int i = 0; i < dengjiList.size(); i++) {
                    if (App.getInstance().userBean.getUser_id().equals(dengjiList.get(i).getUerid())) {
                        dengj.add(dengjiList.get(i));
                    }
                }
                dengjiAdapter = new DengjiAdapter(this, dengj);
                lvData.setAdapter(dengjiAdapter);
            }
        } catch (DbException e) {
            e.printStackTrace();
        }
    }
}

该代码无法在返回时进行数据的自动更新,所以在最后加一个自动更新的函数。

@Override       //这里是实现了自动更新
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        init();
    }

然后运行程序,在修改数据后返回,则可以看到更新后的数据显示。

Android 开发中,返回一个 `Activity` 是一个常见的需求,通常通过系统自带的返回栈(Back Stack)机制实现。以下是一些常用方法和注意事项: ### 1. 使用系统返回Android 系统默认提供了返回栈机制,当用户按下设备上的返回键时,当前 `Activity` 会被销毁,系统会恢复上一个 `Activity`。这是最标准、最推荐的方式。 ### 2. 通过 `finish()` 方法结束当前 `Activity` 如果需要在特定操作(如点击按钮)后返回上一级界面,可以在当前 `Activity` 中调用 `finish()` 方法。这将结束当前 `Activity`,并自动返回到上一个处于返回栈中的 `Activity` [^2]。例如: ```java public void GoBack(View view) { finish(); } ``` ### 3. 使用 `Intent` 显式跳转 虽然通常不推荐这种方式(因为会创建新的 `Activity` 实例),但在某些特殊场景下可以通过 `Intent` 显式跳转回上一个 `Activity`。例如: ```java Intent intent = new Intent(CurrentActivity.this, PreviousActivity.class); startActivity(intent); ``` 如果希望避免创建新的实例,可以使用 `Intent` 的标志位来控制任务栈,例如: ```java Intent intent = new Intent(CurrentActivity.this, PreviousActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); ``` ### 4. 返回刷新一个 `Activity` 如果希望在返回刷新一个 `Activity` 的内容(例如更新 `ListView`),可以在上一个 `Activity` 中重写 `onResume()` 方法,并在此方法中执行刷新逻辑 [^3]。例如: ```java @Override protected void onResume() { super.onResume(); // 执行刷新操作,如重新加载数据 } ``` ### 5. 自定义返回行为 如果希望在点击某个按钮时模拟系统返回键的行为,可以调用 `onBackPressed()` 方法。例如: ```java toolbarBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); ``` 这种方式会触发 `Activity` 的 `onBackPressed()` 方法,与用户按下物理返回键行为一致 [^1]。 ### 注意事项 - 如果在启动 `Activity` 时调用了 `finish()` 方法结束当前 `Activity`,则返回时不会重新创建该 `Activity`,而是从返回栈中恢复。 - 使用 `Intent` 显式跳转时,若不使用 `FLAG_ACTIVITY_CLEAR_TOP` 等标志位,可能会导致任务栈中出现多个相同的 `Activity` 实例。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值