上一篇博客介绍了如何解决Fragment重叠的问题,有需要的同学可以看一下,底部有demo下载。
直通车:完美解决Fragment重叠
本篇博客我们来说一下怎么让fragment重新加载布局资源文件。以及要注意的问题。
首先来说一下为什么有这个需求。
比如,我有这么一个页面,如下图
该页面要填写一大堆数据,然后点击提交会把当前页面的数据提交到服务器,提交完成后我想把当前页面已填写的数据给清除掉。怎么办呢?
最笨的方法就是,我找到每个控件,然后赋个空值,不过这样也太麻烦了点,而且也不好维护。
简单点的办法就是,当我提交完成后,先把该fragment移除掉,然后重新创建加载一遍,这样一来,页面的数据就回到初始状态了。
需要注意的是要处理好fragment的移除和添加显示操作,避免出现重叠的bug
在fragment中调用一下父activity中的reLoadFragView()方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.submit:
/*模拟提交成功后 重新加载布局*/
MainActivity activity= (MainActivity) getActivity();
activity.reLoadFragView();
break;
}
return super.onOptionsItemSelected(item);
}
MainActivity中现将fragment移除,然后重新添加显示即可。
/*重新加载布局*/
public void reLoadFragView(){
/*现将该fragment从fragmentList移除*/
if (fragmentList.contains(dashboardFragment)){
fragmentList.remove(dashboardFragment);
}
/*从FragmentManager中移除*/
getSupportFragmentManager().beginTransaction().remove(dashboardFragment).commit();
/*重新创建*/
dashboardFragment=new DashboardFragment();
/*添加到fragmentList*/
fragmentList.add(dashboardFragment);
/*显示*/
showFragment(dashboardFragment,DASHBOARD_FRAGMENT_KEY);
}
需要注意的是,如果报Can not perform this action after onSaveInstanceState这个错误的话,就把commit更改为commitAllowingStateLoss即可。
效果图:
下面是demo,希望能帮到你。
如果你觉得本文对你有帮助,麻烦动动手指顶一下,算是对本文的一个认可,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客 ,谢谢!