2017-09-25 47 views
0

我有一個內嵌Viewpager的嵌套片段。我想在Viewpager的片段之一來訪問(使用MainActivity)的方法,但我只得到了最後Viewpager片段或當我使用如何訪問Viewpager的片段方法?

ProfileFragment f = (ProfileFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentLayout); 
... 
Fragment f = v.getChildFragmentManager().findFragmentById(R.id.pager); 

// Doesn't even work when I use findFragmentByTag("TAG") 

不能訪問的方法,其中「fragmentLayout」是容器爲我的片段交易內activity_main.xml。 (目前內ProfileFragment)

這裏是我嵌套我的碎片/ XML:

MainActivity 
    - fragmentLayout 
    - ProfileFragment (or LoginFragment/ChatFragment/ShopFragment/etc) 
     - xml items 
     - viewPager 
     - Fragment1 
     - Fragment2 // can't access methods in here from MainActivity 
    - navigationTabs 

我試圖讓從ProfileFragment的Viewpager & PageAdapter,它顯示片段的正確數目,但我似乎無法訪問這些方法。

接口是否可以查看?還是有更簡單的方法?謝謝。

回答

0

無解的工作對我來說&我實現了我的嵌套片段的接口麻煩

我最終將方法放在MainActivity中,這對我來說是最簡單的解決方案。

我還可以直接從MainActivity訪問嵌套片段視圖與

TextView tv1 = findViewById(R.id.exampleid); 
0
String tag = makeFragmentName(mViewPager.getId(), getItemId(position)); 
Fragment fragment = getSupportFragmentManager().findFragmentByTag(tag); 
return fragment; 
((YourFragment)fragment).methodName(); 

試試這個

0

有2層簡單的方法可以做到這一點:

  1. Store中你ProfileFragmentFragment1Fragment2,那麼當你需要調用有功能,只需要調用fragment1.doSomeThing()從你的ProfileFragment。這種方法是確定的,當你ViewPager's adapter不要有太多的片段(在這種情況下,你應該使用WeakReference避免OOM存儲您fragments`時。
  2. 使用EventBus(或LocalBroadCastReceiver,但我更喜歡EventBus),然後就可以調用從任何地方你doSomeThing()功能,與呼叫像下面:

    EventBus.getDefault().post(new CallYourFunctionObject(int value)