Fragment之间通过add切换时的显示与隐藏
新手,不知道用什么方法实现 ,通过动态的方法显示了Fragment A,在这个里面点击列表项时add方法动态加载Fragment B,但是两者都会一起显示,重叠在一起了,如果用replace方法,那么返回时原来的A内容就变化了,不是用户点击以前的了。个人的想法时在加载B时在B中隐藏A,当B退出时再把A显示出来,经过实践,效果还行。
1. 创建A时,使用tag,方便在B中找到它。
if (fragtwo==null){ fragtwo=new twoFragment(); FT.add(R.id.layFrame,fragtwo,"FA"); }else{ FT.show(fragtwo); }
在A中创建B.
lv_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String url= filelist[position].toString(); FragmentManager Fm=getFragmentManager(); FragmentTransaction FT=Fm.beginTransaction(); Fragvideo=VideoFragment.newInstance(url); FT.add(R.id.layFrame, Fragvideo,"FB"); FT.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); FT.addToBackStack(null); FT.commit(); } });
在Fragment B的 onCreateView中查找到A,然后隐藏起来,先定义一个Fragment,在不同的事件中使用。
private Fragment Fm; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { vi=inflater.inflate(R.layout.fragment_video, container, false); Fm=getFragmentManager().findFragmentByTag("Ftwo"); getFragmentManager().beginTransaction().hide(Fm).commit(); }
在B中我是通过一个按钮来返回A的,在返回中让A显示出来,弹出B
btn_fh.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getFragmentManager().beginTransaction().show(Fm).commit(); getFragmentManager().popBackStack(); // getActivity().onBackPressed(); } });
不知道方法对不对,希望大神提供更好的方法,我是小白,代码太复杂了看不懂。