Android Studio中Activity跳转后TextView计数状态恢复问题求助
解决两个Activity点击次数恢复的问题
嘿,作为Android Studio新手碰到这种状态保存的问题太常见了,我来一步步帮你搞定:
一、先搞定单个Activity的状态保留(跳转回来不丢失点击次数)
不管是第一个还是第二个Activity,当你跳转到另一个页面后,当前Activity可能会被系统回收(比如内存不足的时候),这时候原来的点击次数就会重置。我们可以用Android自带的onSaveInstanceState和状态恢复机制来解决:
1. 给第一个Activity加状态保存逻辑
首先在第一个Activity里定义个变量存点击次数,然后重写保存和恢复的方法:
private int firstClickCount = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); TextView countTv = findViewById(R.id.first_count_text); Button clickBtn = findViewById(R.id.first_click_btn); Button gotoSecondBtn = findViewById(R.id.goto_second_btn); // 从保存的状态里恢复点击次数 if (savedInstanceState != null) { firstClickCount = savedInstanceState.getInt("FIRST_CLICK_NUM", 0); countTv.setText(String.valueOf(firstClickCount)); } // 自身按钮点击计数逻辑 clickBtn.setOnClickListener(v -> { firstClickCount++; countTv.setText(String.valueOf(firstClickCount)); }); // 跳转到第二个Activity的逻辑(你已经会这个啦,这里只是补全) gotoSecondBtn.setOnClickListener(v -> { startActivity(new Intent(FirstActivity.this, SecondActivity.class)); }); } // 保存当前点击状态 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("FIRST_CLICK_NUM", firstClickCount); }
2. 第二个Activity同理处理10个按钮的总次数
第二个Activity有10个按钮,我们统计总点击次数,同样用状态保存:
private int secondTotalClicks = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); TextView totalCountTv = findViewById(R.id.second_total_count); // 恢复之前的总点击数 if (savedInstanceState != null) { secondTotalClicks = savedInstanceState.getInt("SECOND_TOTAL_NUM", 0); totalCountTv.setText(String.valueOf(secondTotalClicks)); } // 给10个按钮批量设置点击事件(假设按钮id是btn_1到btn_10) for (int i = 1; i <= 10; i++) { int btnId = getResources().getIdentifier("btn_" + i, "id", getPackageName()); Button btn = findViewById(btnId); btn.setOnClickListener(v -> { secondTotalClicks++; totalCountTv.setText(String.valueOf(secondTotalClicks)); }); } // 返回第一个Activity的按钮(用系统返回键也可以) Button backBtn = findViewById(R.id.back_to_first_btn); backBtn.setOnClickListener(v -> finish()); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("SECOND_TOTAL_NUM", secondTotalClicks); }
二、如果需要把第二个Activity的次数带回第一个页面
要是你想从第二个页面返回时,把那里的总点击数显示在第一个Activity里,可以用ActivityResultLauncher(替代已废弃的startActivityForResult):
1. 第一个Activity准备接收返回数据
// 先注册一个ActivityResultLauncher private ActivityResultLauncher<Intent> secondActivityLauncher; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); // 初始化Launcher secondActivityLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == RESULT_OK && result.getData() != null) { // 获取第二个页面传回来的点击数 int secondCount = result.getData().getIntExtra("SECOND_CLICK_TOTAL", 0); // 显示在第一个页面的某个TextView里 TextView secondResultTv = findViewById(R.id.second_result_text); secondResultTv.setText("第二个页面总点击:" + secondCount); } } ); // 跳转按钮改用Launcher启动 Button gotoSecondBtn = findViewById(R.id.goto_second_btn); gotoSecondBtn.setOnClickListener(v -> { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); secondActivityLauncher.launch(intent); }); // 其他自身点击和状态保存逻辑不变... }
2. 第二个Activity返回时传递数据
在返回按钮的点击事件里,把总点击数打包传回去:
Button backBtn = findViewById(R.id.back_to_first_btn); backBtn.setOnClickListener(v -> { Intent resultIntent = new Intent(); resultIntent.putExtra("SECOND_CLICK_TOTAL", secondTotalClicks); setResult(RESULT_OK, resultIntent); finish(); });
额外补充:长期保存点击次数(退出APP再打开也能恢复)
如果希望关闭APP再打开,点击次数还在,那就用SharedPreferences存到本地:
// 保存次数(比如在按钮点击后或者onPause里) SharedPreferences sp = getSharedPreferences("ClickRecord", MODE_PRIVATE); sp.edit().putInt("FIRST_COUNT", firstClickCount).apply(); // 读取次数(在onCreate里) firstClickCount = sp.getInt("FIRST_COUNT", 0);
这样不管是跳转后恢复,还是长期保存,都能搞定啦~
内容的提问来源于stack exchange,提问作者Bacchelli Matteo
相关产品推荐
相关产品推荐

