当前位置: 代码迷 >> Android >> 怎的启动已经存在的 fragment
  详细解决方案

怎的启动已经存在的 fragment

热度:631   发布时间:2016-04-28 02:15:45.0
怎样启动已经存在的 fragment
我有2个 fragment, 代码是这样的


        FirstFragment first = new FirstFragment();
        SecondFragment second = new SecondFragment();

        
        getFragmentManager().beginTransaction()
                .add(R.id.default_fragment_container, first, "first")
                .add(second, "second")
                .commit();


这样启动以后, 就可以看到 first fragment 里面的东西了,
现在 在 first fragment 里面有个button, 点击以后要启动 second fragment, 就不知道该怎么做了。


                //SecondFragment second = new SecondFragment();
                //getFragmentManager().beginTransaction().replace(R.id.default_fragment_container, getFragmentManager().getFragment(instance_state, "second")).commit();

                Fragment f = getFragmentManager().findFragmentByTag("second");

                if (f == null) Log.d("error", "fragment is null");
                else Log.d("error", "fragment is not null");

                //getFragmentManager().beginTransaction().replace(R.id.default_fragment_container, getFragmentManager().findFragmentByTag("second")).commit();
                //getFragmentManager().findFragmentByTag("second").onCreate(instance_state);
                getFragmentManager().beginTransaction().attach(f).commit();


上面能获取到 second fragment, 但是启动不起来。

希望大神们给予解答, 估计你们觉得挺奇怪, 干嘛要这么写, 其实我就是想弄明白, 到底能不能一次 add 多个 fragment(已经验证了是可以的), 如果一次add了多个fragment, 那么怎样去启动一个已经被 added 的fragment。
------解决思路----------------------
引用:
Quote: 引用:

FragmentTransaction的两个方法,hide一个,show另一个。


如果

getFragmentManager().beginTransaction().hide(getFragmentManager().findFragmentByTag("first")).show(f).commit();

show的话, 貌似不起作用啊


引用:
Quote: 引用:

FragmentTransaction的两个方法,hide一个,show另一个。


如果

getFragmentManager().beginTransaction().hide(getFragmentManager().findFragmentByTag("first")).show(f).commit();

show的话, 貌似不起作用啊


实验过的,可以的啊,你不要把代码连成片写,一个个对象获取,创建两个fragment,transaction = fragmentManager.beginTransaction();transaction添加完,就直接调用hide哪一个,show哪一个了。

------解决思路----------------------
getFragmentManager().beginTransaction()                
 .add(R.id.default_fragment_container, first, "first")                 
.add(second, "second")                 
.commit();

加第二个的时候换成这样试试
 .add(R.id.default_fragment_container, second, "second")                 
  相关解决方案