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();
            }
 });

不知道方法对不对,希望大神提供更好的方法,我是小白,代码太复杂了看不懂。

  

原文地址:https://www.cnblogs.com/wjbych/p/7227212.html