2012-05-25 3 views
1

FragmentActivity를 사용하여 탭이있는 응용 프로그램을 개발했습니다. 조각을 호출하는 동안 추가 데이터를 전달할 수있는 방법과 그 데이터를 조각 클래스로 가져 오는 방법은 무엇입니까?조각 클래스에 여분의 데이터를 전달하고 해당 데이터를 조각으로 가져 오는 방법은 무엇입니까?

탭을 추가하는 코드는 다음과 같습니다. 조각 클래스는 그 안에 직접 지정됩니다.

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

이 경우 어떻게 일부 데이터를 조각 클래스에 전달할 수 있습니까? 이 일을 도와주세요.

+0

FragmnetActivity 또는 Fragment 클래스에서 추가로 전달합니까? – kyogs

+0

Fragment 클래스에서 추가 데이터를 얻으려면 어떻게해야합니까? – AbiAndroid

+0

[안드로이드 : 단편에 데이터 전달 (엑스트라)] 가능한 복제본 (http://stackoverflow.com/questions/15392261/android-pass-dataextras-to-a-fragment) –

답변

5

여기에서 확인할 수 있습니다 : 그 예에서

http://developer.android.com/reference/android/app/TabActivity.html 그들이 당신이 그들의 자신의 TabManager를 구현하고 있음을 알 수 아래로 보는 경우, 지원 패키지와 함께 FragmentTabs를 사용하는 방법을 보여줍니다. 당신이 그 번들 (인수)에 데이터를 넣을 수 있습니다

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

:이 그들이 함수 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를 만들을, 이전에 정의.) (

@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를 호출 조각 자체에서 해당 번들에 액세스 할 수 있습니다 : 이제 오버라이드 (override) 함수를 보면 당신이 번들이 조각의 인스턴스 (newTab.args)에 전달되는 방법을 볼 수 있습니다 onTabChanged

희망이 도움이됩니다.

+0

고맙습니다. 지금 getArgument()를 호출하는 동안 데이터를 가져올 수 있습니까 – AbiAndroid

+0

:) 잘 듣고, 그 답을 유효한 것으로 표시 할 수 있습니까? 그래서 사람들은이 질문을 해결 된 것으로 봅니다. –

관련 문제