2012-03-20 126 views
4

我正在使用android给出的兼容性库android.cupport-v4.jar,我发现一个问题,我开始构建一个包含多个片段的TabActivity到它的选项卡中。当添加另一个片段时,片段活动变为空

我有了一个GridView,从适配器我叫下面的代码项目的听众起始标签:

FragmentManager manager = getSupportFragmentManager(); 
FragmentTransaction ft = manager.beginTransaction(); 
ft.add(R.id.relativeLayoutContent, newFragment); 
//  ft.replace(R.id.relativeLayoutContent, newFragment); 
ft.addToBackStack(null); 
ft.commit(); 

的问题是,当我打开新的片断,并返回到第一个,它不会去onAttach,因为它从来没有去附加,并且自从新的Fragment是,活动现在保持最后一个,但不是第一个,如果我尝试再次单击一个元素,它会崩溃告诉我,Fragment的getActivity方法为null。

对此的任何解决方法?

回答

0

我不完全确定你正在努力完成的任务,但无论如何我都会对它进行刺探。

您应该使用fragmentmanager来保存您的不同片段,但是当您在FragmentTransaction中使用add方法时,请为您的片段分配一个标签,以便您可以轻松地在片段之间来回切换。

TabActivity也被弃用。 你有没有想过在ActionBar中使用Tabs? http://developer.android.com/guide/topics/ui/actionbar.html#Tabs

这里是一个片段,我从拉东西,我目前的工作:

public void changeFragment(String tag){ 

    Fragment tmpFragment; 
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 

    //look to see if we have already added the fragment 
    tmpFragment = getFragmentManager().findFragmentByTag(tag); 

    //we currently have a fragment, hide it 
    if (currentFragment != null){ 
     fragmentTransaction.detach(currentFragment); 
    } 

    //did not find the fragment 
    if (tmpFragment == null){ 
     if (tag.equals("map")){ 
     currentFragment = CustomMapFragment.newInstance(); 
     } else if (tag.equals("list")){ 
     currentFragment = ListFragment.newInstance(); 
     }else { 
     //TODO 
    } 
    //add fragment for 1st time 
    fragmentTransaction.add(R.id.content_frame, currentFragment, tag); 
    } else { 
    //we found the fragment 
    currentFragment = tmpFragment; 
    fragmentTransaction.attach(currentFragment); //show the fragment we found 
    } 
    fragmentTransaction.commit(); 
} 

您可以使用此方法来根据自己的标签片段之间切换。