如何从通过片段实例化的类调用方法?

时间:2012-10-24 06:13:12

标签: java android

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

 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的方法,我该怎么做呢?

1 个答案:

答案 0 :(得分: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()