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

