0

我想调用在类中声明的方法,但包含该方法的类由片段实例化:

 protected void setupViewPager() {

    List<Fragment> fragments = new Vector<Fragment>();

    fragments.add(Fragment.instantiate(this, AFTab1.class.getName()));
    fragments.add(Fragment.instantiate(this, AFTab2.class.getName()));
    fragments.add(Fragment.instantiate(this, AFTab3.class.getName()));

    this.mPagerAdapter  = new PagerAdapter(super.getSupportFragmentManager(), fragments);
    this.mViewPager = (ViewPager)super.findViewById(R.id.viewpager);
    this.mViewPager.setAdapter(this.mPagerAdapter);
    this.mViewPager.setOnPageChangeListener(this);
}

例如,如果我想调用 AFTab1 的方法,我该怎么做呢?

4

1 回答 1

0

有几个选项供您选择。您可以存储对返回的片段的引用instantiate(),可以给片段一个 id,还可以给它一个标签(我敢打赌还有更多选择)。在您的情况下,我将存储这样的参考:

protected void setupViewPager() {

    List<Fragment> fragments = new Vector<Fragment>();

    AFTab1 tab1 = (AFTab1) Fragment.instantiate(this, AFTab1.class.getName());
    AFTab2 tab2 = (AFTab2) Fragment.instantiate(this, AFTab2.class.getName());
    AFTab3 tab3 = (AFTab3) Fragment.instantiate(this, AFTab3.class.getName());

    fragments.add(tab1);
    fragments.add(tab2);
    fragments.add(tab3);

    tab1.aMethod();

    ...

您当然可以存储参考以供以后使用,但要小心泄漏。

更新:请注意,您也可以通过多种方式创建片段,例如使用其构造函数。您不必使用instantiate().

于 2012-10-24T06:27:09.090 回答