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

Android应用如何实现重启后永久保持最后一次访问的Layout可见状态

解决方案

你需要使用安卓提供的SharedPreferences轻量存储组件持久化保存布局的显示状态,应用重启后读取存储的状态设置对应布局可见性即可,修改步骤如下:

步骤1:添加常量定义

在MainActivity类中添加存储相关的常量键,方便统一调用:

public class MainActivity extends AppCompatActivity {
    // 新增以下两行常量
    private static final String PREF_NAME = "AppStatusPrefs";
    private static final String KEY_SHOW_CHECKOUT = "show_checkout_layout";

    // 原有变量定义保持不变
    DrawerLayout drawerLayout;
    SupportMapFragment supportMapFragment;
    SupportMapFragment supportMapFragment1;
    FusedLocationProviderClient client;
    // ... 其余原有变量不用修改

步骤2:修改onCreate中初始化布局可见性的逻辑

删除原有硬编码设置布局可见性的两行代码,替换为读取SharedPreferences存储值的逻辑:

// 删掉原来的这两行:
// checkinLayout.setVisibility(View.VISIBLE);
// checkoutLayout.setVisibility(View.INVISIBLE);

// 替换为以下代码:
SharedPreferences prefs = getSharedPreferences(PREF_NAME, MODE_PRIVATE);
boolean isShowCheckout = prefs.getBoolean(KEY_SHOW_CHECKOUT, false);
if (isShowCheckout) {
    checkoutLayout.setVisibility(View.VISIBLE);
    checkinLayout.setVisibility(View.GONE);
} else {
    checkinLayout.setVisibility(View.VISIBLE);
    checkoutLayout.setVisibility(View.INVISIBLE);
}

步骤3:每次切换布局时保存最新状态到SharedPreferences

分别在两个按钮的点击事件中添加保存状态的代码:

3.1 签到按钮(checking_button)点击事件补充

切换到checkoutLayout显示后保存状态:

checking_button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(tv_location.getText().toString().isEmpty() || editText_remark.getText().toString().isEmpty()){
            Toast.makeText(getApplicationContext(), "Please Enter your Location and Remark", Toast.LENGTH_SHORT).show();
        }else {
            checkoutLayout.setVisibility(v.VISIBLE);
            checkinLayout.setVisibility(v.GONE);
            // 新增:保存当前状态为显示checkout布局
            getSharedPreferences(PREF_NAME, MODE_PRIVATE)
                    .edit()
                    .putBoolean(KEY_SHOW_CHECKOUT, true)
                    .apply();
            // 原有其余逻辑保持不变
            tStart = SystemClock.uptimeMillis();
            handler.postDelayed(runnable, 0);
            chronometer.start();
            location_checkout.setText(tv_location.getText().toString());
            location_remark.setText(editText_remark.getText().toString());
            dateView.setText("Date:"+ date);
            timeView.setText("Punch-In:"+ currentTime);
        }
    }
});

3.2 签退按钮(checkout_button)点击事件补充

切换到checkinLayout显示后保存状态:

checkout_button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        checkinLayout.setVisibility(v.VISIBLE);
        checkoutLayout.setVisibility(v.GONE);
        // 新增:保存当前状态为显示checkin布局
        getSharedPreferences(PREF_NAME, MODE_PRIVATE)
                .edit()
                .putBoolean(KEY_SHOW_CHECKOUT, false)
                .apply();
    }
});

补充说明

SharedPreferences存储的数据会保存在应用本地目录,只要用户不清除应用缓存/数据,重启应用后状态都会保留。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:54:03