处理某一Fragment返回键的方法
需求:从fragmentA到fragmentB ,在fragmentB页面编辑之后,返回fragmentA ,默认不会重新加载fragmentA ,这里需要加载新数据
解决方法
1. 输出fragment生命周期,返回后没有输出,说明不能通过生命周期来加载新数据
2. 重写onBackPressed事件,尝试成功
主要代码
在Activity中
@Override public void onBackPressed() { super.onBackPressed(); final FragmentA fragment = (FragmentA) getSupportFragmentManager() .findFragmentByTag("fragment_a"); if (fragment != null) { fragment.onBackPressed(); } }
在FragmentB
public void onBackPressed() { //这里写返回逻辑,我写的是跳转到FragmentA }遇到fragment为空的问题,因为findFragmentByTag找不到那个fragment,需要添加进去。又因为fragment不能重复add,所以要做个判断
这里是从FragmentA跳转到FragmentB的代码
FragmentB newFragment = new FragmentB(); newFragment.newInstance(1, MainActivity.this); FragmentTransaction transaction = getSupportFragmentManager() .beginTransaction(); FragmentB fragment = (FragmentB) getSupportFragmentManager() .findFragmentByTag("fragment_a"); if (fragment == null) { transaction.add(newFragment, "fragment_a"); } transaction.replace(R.id.fragment_a, newFragment); transaction.addToBackStack(null); transaction.commit();另外,如果用findFragmentById,需要在MainActivity的layout文件中添加fragmentB,然后add要不然找不到
网上说的还有一种方法,试了下没有起作用,还没弄明白,代码如下
getView().setOnKeyListener( new OnKeyListener() { @Override public boolean onKey( View v, int keyCode, KeyEvent event ) { if( keyCode == KeyEvent.KEYCODE_BACK ) { Toast.makeText(getActivity(),"Clicked", Toast.LENGTH_SHORT).show(); } return false; } } );
参考:
http://stackoverflow.com/questions/7992216/android-fragment-handle-back-button-press
http://stackoverflow.com/questions/15525111/getsupportfragmentmanager-findfragmentbyid-returns-null
本文地址:http://www.45fan.com/a/luyou/71744.html