页面切换返回后ImageView与TextView消失问题求助
问题分析与解决方案
问题根源
你遇到的问题核心在于:每次跳转到其他页面时调用了finish()方法,这会直接销毁当前的MainActivity实例。当你从其他页面按返回键回到主页时,系统会重新创建一个MainActivity,但此时新启动的MainActivity对应的Intent中,userName和ProfilePic这两个参数已经不存在了,导致TextView y没有文本内容、ImageView x没有加载到图片,最终出现控件“消失”的现象。
解决方案
方案1:移除跳转时的finish()调用(推荐)
不需要销毁MainActivity,跳转后MainActivity会保留在任务栈中,按返回键回到的是原实例,参数不会丢失。修改后的点击事件代码如下:
Agrup.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 移除finish() Intent intent = new Intent(MainActivity.this, AGrup.class); startActivity(intent); } }); Dgrup.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 移除finish() Intent intent = new Intent(MainActivity.this, DGrup.class); startActivity(intent); } }); BGrup.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 移除finish() Intent intent = new Intent(MainActivity.this, Bgroup.class); startActivity(intent); } }); CGrup.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 移除finish() Intent intent = new Intent(MainActivity.this, CGrup.class); startActivity(intent); } }); LogOut.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 退出登录时可保留finish(),无需再返回当前MainActivity finish(); Intent intent = new Intent(MainActivity.this, UygulamaGirisSayfasi.class); startActivity(intent); } });
方案2:持久化用户信息(适合必须销毁MainActivity的场景)
如果业务上需要销毁MainActivity,可以将userName和ProfilePic存储到SharedPreferences中,在MainActivity的onCreate方法中优先从SharedPreferences读取数据,而非仅依赖Intent参数:
- 在首次获取参数时保存到SharedPreferences:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getSupportActionBar().hide(); AGrup = findViewById(R.id.Agroup); x = findViewById(R.id.x); y = findViewById(R.id.y); // 优先从SharedPreferences读取用户信息 SharedPreferences sp = getSharedPreferences("user_info", MODE_PRIVATE); String userName = sp.getString("userName", ""); String ProfilePic = sp.getString("ProfilePic", ""); // 若SharedPreferences无数据,从Intent获取并保存 if (TextUtils.isEmpty(userName)) { userName = getIntent().getStringExtra("userName"); ProfilePic = getIntent().getStringExtra("ProfilePic"); SharedPreferences.Editor editor = sp.edit(); editor.putString("userName", userName); editor.putString("ProfilePic", ProfilePic); editor.apply(); } y.setText(userName); if (!TextUtils.isEmpty(ProfilePic)) { Picasso.get().load(ProfilePic).into(x); } // 其他控件初始化代码... }
- 退出登录时清空SharedPreferences:
LogOut.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SharedPreferences sp = getSharedPreferences("user_info", MODE_PRIVATE); sp.edit().clear().apply(); finish(); Intent intent = new Intent(MainActivity.this, UygulamaGirisSayfasi.class); startActivity(intent); } });
内容的提问来源于stack exchange,提问作者Mumru
相关产品推荐
相关产品推荐

