私はよく知らないFragmentPagerAdapter
ので、これは私たち(あなた)が説明を批判的に読んだ質問の1つになるでしょう。
構造:一度にFragmentPagerAdapter
2つのフラグメントを保持する(以下のコード)があります。1つ目は本の抜粋を表示し、2つ目は本のタイトルのリストを表示します。
目標:タイトルに記載されていることを達成したい:ユーザーはポケットベルの2番目のフラグメントに移動し、タイトルをクリックしてから、ユーザーを最初のフラグメントに戻し、最初のフラグメントに更新するように指示したいテキスト。最初のフラグメントにはそのtriggerRefresh
ためのメソッドがあります。
コード:私の問題FragmentPagerAdapter
は、フラグメントを再利用/作成する方法(私にはわかりません)が原因で発生すると思います。これは私のクラスです:
static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
switch(position) {
case 0:
return new ExcerptsFragment();
case 1:
return new BookListFragment();
default:
throw new IllegalArgumentException("not this many fragments: " + position);
}
}
}
これが私が関連するメンバーを作成した方法です:
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
MyFragmentPagerAdapter mFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mFragmentPagerAdapter);
そして、これは、本のタイトルからコールバックを受け取ったときに、アクティビティの他の場所で試したものです。タイトルが選択されたフラグメント:
mViewPager.setCurrentItem(0); // back to excerpts screen page. It's OK.
// Here's the problem! How to identify the fragment 0
// to ExcerptsFragment and call its triggerRefresh()?!?
一連の問題:
アダプターを呼び出すと、現在接続されているものではないのgetView()
新しいインスタンスが返されるため、機能しExcerptsFragment
ません(予想どおり、例外がスローされます)。
ここで多くの人(例)がフラグメントをに格納しているのを見てきましたgetView()
。そうですか?公式の例を見ると、私にはアンチパターンのように見えるからです(アイテムを持って自動参照を無効にします)。そして、それはこことここの意見でもあります(そして私には正しく見えます)。
助言がありますか?この一言すべてを理解していなくても驚かないでしょう...