[英]How to load again a Fragment in FrameLayout?
可以说我有类别A和类别B。我根据类别将数据加载到RecyclerView
中。 然后是一个过滤器,它实际上过滤内容。 这是打开/关闭过滤器时的操作:
@Override
public void onShowSheet() {
Fragment f = getActivity().getSupportFragmentManager().findFragmentById(R.id.filterContent);
if (!(f instanceof FilterFragment)) {
FilterFragment filterFragment = FilterFragment.newInstance();
FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.filterContent, filterFragment, "FilterFragment");
fragmentTransaction.commit();
}
}
@Override
public void onHideSheet() {
Fragment f = getActivity().getSupportFragmentManager().findFragmentById(R.id.filterContent);
getActivity().getSupportFragmentManager().beginTransaction().
remove(getActivity().getSupportFragmentManager().findFragmentById(R.id.filterContent)).commit();
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove(f);
trans.commit();
}
});
重新打开过滤器后,它将重新加载过滤器片段及其数据。
当我更改类别并打开过滤器时,它显示为空白。
我如何加载或杀死该片段,以使其不显示空白?
更新资料
更改类别并且过滤器为空白后,按返回键,然后返回到预览类别,并显示过滤器,但是如果尝试应用过滤器,应用程序将崩溃。
更改类别时,我会重新加载数据片段:
public static void inflateGridFragment() {
GridFragment fragment = new GridFragment();
FragmentManager fm = context.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right,
R.anim.slide_out_left, R.anim.slide_out_left);
fragmentTransaction.add(R.id.mdContent, fragment, Strings.TAG_GRID_FRAMGMENT);
fragmentTransaction.addToBackStack(Strings.TAG_GRID_FRAMGMENT);
fragmentTransaction.commit();
}
问题在于,当从类别A更改为类别B时,我正在重新加载承载Filters片段的父片段。 因此,在更改类别时,我检查了包含RecyclerView
片段是否在后堆栈中,然后将popBackStack to that fragment, and update the data from
如下to that fragment, and update the data from
RecyclerView` to that fragment, and update the data from
:
boolean foundGridFragment = false;
String fragmentBackstackTag = "";
FragmentManager fm = context.getSupportFragmentManager();
for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){
fragmentBackstackTag = fm.getBackStackEntryAt(entry).getName();
Log.i(TAG, "Found fragment: " + fragmentBackstackTag);
// check if null, because sometimes fragmentBackstacktag may null
if (fragmentBackstackTag != null) {
if (fragmentBackstackTag.equals(Strings.TAG_GRID_FRAMGMENT)) {
foundGridFragment = true;
fm.popBackStack(Strings.TAG_GRID_FRAMGMENT, 0);
}
}
}
if (!foundGridFragment) {
inflateGridFragment();
}
这也优化了内存使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.