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 に答える