45fan.com - 路饭网

搜索: 您的位置主页 > 手机频道 > 阅读资讯:处理某一Fragment返回键的方法

处理某一Fragment返回键的方法

2016-09-03 11:57:12 来源:www.45fan.com 【

处理某一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
Tags: 处理 某一 Fragment
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部