您的位置:首页 > 运维架构

关于fragment响应回退键的处理与fragment的删除

2015-10-07 20:41 344 查看
今天coding过程中发现需要使fragment响应回退键的操作,首先要了解的是,fragment入栈是作为一个FragmentTransation来实现的,基本的代码如下:

(在某个Fragment中加入新的fragment)

FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.container,fragmentChangePersonalInfPhoneNum,"fragmentChangePersonalInfPhoneNum");
transaction.addToBackStack(null);
transaction.commit();

如此,事务transaction被加入栈中,关于事务与栈的关系,看转载的另一篇博文。

当要回到这个事物执行前的状态时,需要popBackStack操作:

getActivity().getSupportFragmentManager().popBackStack();
FragmentChangePersonalInfPhoneNum delete = (FragmentChangePersonalInfPhoneNum) getActivity().getSupportFragmentManager().findFragmentByTag("fragmentChangePersonalInfPhoneNum");
getActivity().getSupportFragmentManager().beginTransaction().remove(delete);
如果只是popBackStack(),这个fragment并没有被删除,所以为了安全起见,最好在popBackStack()之后执行对这个fragment的删除操作,
推荐使用findFragmentByTag(String tag);来精确的获取fragment。设置tag的方法也很简单,在创建这个Fragment并作为事务执行的时候添加即可:

transaction.replace(R.id.container,fragmentChangePersonalInfPhoneNum,"fragmentChangePersonalInfPhoneNum");
中的字符串部分即是fragmentChangePersonalInfPhoneNum的tag。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  fragment popBackStack tag