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

来源:互联网 发布:中国铁路发展数据 编辑:程序博客网 时间:2024/05/17 20:38

今天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。

0 0
原创粉丝点击