2012-03-20 103 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(); 
} 

您可以使用此方法來根據自己的標籤片段之間切換。

相關問題