Android Studio(Java)中Activity间传递TextEdit值后返回时TextView数据丢失问题求助
解决返回原Activity时EditText数据丢失的问题
我来帮你搞定这个问题~先说说问题出在哪:你在submit_button方法里调用了finish(),这个方法会直接销毁当前的TwoTeam Activity。当你从Begin返回时,系统只能重新创建一个TwoTeam的新实例,之前输入的内容自然就丢失了。另外,就算你不调用finish(),如果系统内存紧张,后台的TwoTeam可能被回收,重建时数据也会丢。下面给你两个关键解决步骤:
步骤1:移除finish()调用
先把submit_button里的finish()删掉,这样TwoTeam会被保留在后台任务栈中,从Begin返回时会直接恢复原来的实例,EditText默认会保存自己的输入状态(前提是你的EditText在布局里有正确的android:id属性)。修改后的方法代码如下:
public void submit_button(View view) { Intent intent = new Intent(TwoTeam.this, Begin.class); name_first = first_name.getText().toString(); name_second = second_name.getText().toString(); intent.putExtra("name1", name_first); intent.putExtra("name2", name_second); startActivity(intent); // 移除finish(),避免当前Activity被销毁 }
步骤2:处理Activity被系统回收的极端情况
为了应对系统内存不足导致后台Activity被回收的场景,我们需要手动保存和恢复EditText的内容,通过onSaveInstanceState和onRestoreInstanceState方法实现。修改后的TwoTeam完整代码:
public class TwoTeam extends AppCompatActivity { EditText first_name, second_name; String name_first, name_second; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two_team); first_name = findViewById(R.id.first_name); second_name = findViewById(R.id.second_name); // 如果之前有保存的数据,恢复到EditText中 if (savedInstanceState != null) { name_first = savedInstanceState.getString("saved_name1"); name_second = savedInstanceState.getString("saved_name2"); first_name.setText(name_first); second_name.setText(name_second); } } // 保存当前EditText的内容,防止Activity被回收时数据丢失 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("saved_name1", first_name.getText().toString()); outState.putString("saved_name2", second_name.getText().toString()); } public void submit_button(View view) { Intent intent = new Intent(TwoTeam.this, Begin.class); name_first = first_name.getText().toString(); name_second = second_name.getText().toString(); intent.putExtra("name1", name_first); intent.putExtra("name2", name_second); startActivity(intent); } }
这样修改后,不管是正常返回还是Activity被回收重建,你输入的内容都能稳稳保留下来啦。
内容的提问来源于stack exchange,提问作者user16240688
相关产品推荐
相关产品推荐

