如何访问Viewpager的Fragment方法?

时间:2017-09-25 04:06:29

标签: java android xml android-viewpager

我有一个嵌套的片段,里面有一个Viewpager。我正在尝试在Viewpager的一个片段中访问一个方法(使用MainActivity),但是我只使用最后一个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中我的Fragment Transactions的容器。 (目前ProfileFragment里面)

以下是我嵌套Fragments / xml的方法:

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

我尝试过使用Viewpager&来自ProfileFragment的PageAdapter,它显示了正确的片段数,但我似乎无法访问这些方法。

接口是否需要考虑?或者有更简单的方法吗?谢谢。

3 个答案:

答案 0 :(得分:0)

String tag = makeFragmentName(mViewPager.getId(), getItemId(position));
Fragment fragment = getSupportFragmentManager().findFragmentByTag(tag);
return fragment;
((YourFragment)fragment).methodName();

试试这个

答案 1 :(得分:0)

有两种简单的方法可以做到:

  1. Fragment1Fragment2存储在ProfileFragment中,然后当您需要拨打此功能时,只需从fragment1.doSomeThing()拨打ProfileFragment即可}。当ViewPager's adapter没有太多碎片时,这种方法是可以的(在这种情况下,您应该使用WeakReference来避免在存储碎片时出现OOM。
  2. 使用EventBus(或LocalBroadCastReceiver,但我更喜欢EventBus)。然后,您可以从任何地方拨打doSomeThing()电话,电话如下:

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

答案 2 :(得分:0)

这些解决方案都不适用于我和我在使用嵌套片段实现接口时遇到了麻烦。

我最终将这些方法放在MainActivity中,这对我来说是最简单的解决方案。

我也可以使用

直接从MainActivity访问嵌套的片段视图
TextView tv1 = findViewById(R.id.exampleid);