Android开发:如何从Activity返回至之前的Fragment
解决从City Activity返回至Hotel Fragment的问题
嘿,作为Android新手碰到这个问题太正常啦,我来一步步帮你搞定~
一、默认返回行为(最简单的方式)
其实系统本身就帮你处理了基础的返回逻辑:
- 当你从
HotelFragment通过Intent启动City.java后,MainActivity会被推到后台但不会被销毁。 - 此时按下设备的返回键,或者在
City.java里调用finish()方法,系统会自动销毁City Activity,回到MainActivity,而MainActivity会自动恢复之前显示的HotelFragment。
不过如果你发现返回后没有回到HotelFragment,大概率是MainActivity的代码有问题——比如在onResume()里每次都重新加载了默认Fragment。检查下MainActivity.java里有没有类似这样的代码:
@Override protected void onResume() { super.onResume(); // 这种写法会导致每次回到MainActivity都加载HomeFragment,覆盖之前的HotelFragment getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container, new HomeFragment()) .commit(); }
如果有,赶紧删掉这段,或者加个判断:只有当Fragment容器里没有Fragment时,才加载默认Fragment。
二、手动添加返回按钮(比如顶部导航栏的返回箭头)
如果想在City Activity里加一个自定义的返回按钮(比如ActionBar的返回箭头),可以这么做:
在City.java里启用ActionBar返回箭头
在onCreate()方法里添加:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_city); // 启用ActionBar的返回按钮 if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle("选择城市"); // 设置标题,可选 } }处理返回按钮的点击事件
重写onOptionsItemSelected()方法:@Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { // 点击返回箭头,关闭当前Activity finish(); return true; } return super.onOptionsItemSelected(item); }这样点击顶部的返回箭头,就会回到之前的
HotelFragment啦。
三、额外注意点
确保你在
HotelFragment里启动City Activity的代码是正常的,比如:// HotelFragment.java里的跳转代码 Intent intent = new Intent(getActivity(), City.class); startActivity(intent);这里用
getActivity()获取上下文是正确的,因为Fragment依附于MainActivity。如果需要从
City Activity返回数据给HotelFragment,可以用registerForActivityResult(AndroidX推荐的方式),不过这是进阶需求,如果你暂时不需要可以先忽略~
内容的提问来源于stack exchange,提问作者rk_1
相关产品推荐
相关产品推荐

