2012-05-25 24 views
1

我已經使用FragmentActivity開發了一個帶有選項卡的應用程序。如何在調用片段時傳遞一些額外的數據,以及如何在片段類中獲取該數據?如何將額外數據傳遞給片段類以及如何獲取片段中的數據?

添加標籤的代碼如下。片段類直接在其中指定。

mTabManager.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"), 
    DetailFragment.class, null); 

在這種情況下,我該如何傳遞一些數據到片段類。請任何人幫忙做到這一點。

+0

你在FragmnetActivity或Fragment類中傳遞額外的內容? – kyogs

+0

如何在Fragment類中獲得額外的數據? – AbiAndroid

+0

可能重複[Android:傳遞數據(額外)到片段](http://stackoverflow.com/questions/15392261/android-pass-dataextras-to-a-fragment) –

回答

5

您可以點擊這裏:http://developer.android.com/reference/android/app/TabActivity.html

在那個例子中,他們展示瞭如何使用FragmentTabs與支持包,如果你往下看,你可以看到他們實現自己的TabManager類。在那裏,他們實現函數addTab:

 public void addTab(TabHost.TabSpec tabSpec, Class<?> clss, Bundle args) { 
     tabSpec.setContent(new DummyTabFactory(mActivity)); 
     String tag = tabSpec.getTag(); 

     TabInfo info = new TabInfo(tag, clss, args); 

     // Check to see if we already have a fragment for this tab, probably 
     // from a previously saved state. If so, deactivate it, because our 
     // initial state is that a tab isn't shown. 
     info.fragment = mActivity.getSupportFragmentManager().findFragmentByTag(tag); 
     if (info.fragment != null && !info.fragment.isDetached()) { 
      FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); 
      ft.detach(info.fragment); 
      ft.commit(); 
     } 

     mTabs.put(tag, info); 
     mTabHost.addTab(tabSpec); 
    } 

還有你創建對象TabInfo,以前定義爲:

static final class TabInfo { 
     private final String tag; 
     private final Class<?> clss; 
     private final Bundle args; 
     private Fragment fragment; 

     TabInfo(String _tag, Class<?> _class, Bundle _args) { 
      tag = _tag; 
      clss = _class; 
      args = _args; 
     } 
    } 

你可以把對束(參數)的數據。現在,如果你看一下重寫的功能onTabChanged你可以看到包是如何在片段的實例化(newTab.args)通過:

@Override 
    public void onTabChanged(String tabId) { 
     TabInfo newTab = mTabs.get(tabId); 
     if (mLastTab != newTab) { 
      FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction(); 
      if (mLastTab != null) { 
       if (mLastTab.fragment != null) { 
        ft.detach(mLastTab.fragment); 
       } 
      } 
      if (newTab != null) { 
       if (newTab.fragment == null) { 
        newTab.fragment = Fragment.instantiate(mActivity, 
          newTab.clss.getName(), newTab.args); 
        ft.add(mContainerId, newTab.fragment, newTab.tag); 
       } else { 
        ft.attach(newTab.fragment); 
       } 
      } 

      mLastTab = newTab; 
      ft.commit(); 
      mActivity.getSupportFragmentManager().executePendingTransactions(); 
     } 
    } 

最後,您可以訪問調用getArguments片段本身束()

希望有所幫助。

+0

非常感謝....我我可以在調用getArgument() – AbiAndroid

+0

:)的時候獲得數據,聽起來很好,你可以將答案標記爲有效嗎?所以人們看到這個問題已經解決。 –

相關問題