4

私はこの質問とほぼ同じ問題を抱えています: Android, How to restart/refresh a fragment from FragmentActivty?

ListFragment親からa の a メソッドを呼び出そうとしていますFragmentActivity

ただし、日食によって生成されたテンプレート Swipe + Fixed Tabs を使用しています。呼び出してみgetSupportFragmentManager().findFragmentById(R.id.myfragment)ましたが、戻り値は常に null です。myfragmentアプリのどこにも定義していないため、これが問題になる可能性があると推測しています。しかし、すべてのフラグメントが動的に作成されるため、どこで定義すればよいかわかりません。

Eclipse で Android SDK によって生成された Swipe + Fixed Tabs テンプレートに慣れていない人のために説明すると、FragmentPagerAdapter getItem関数をオーバーライドしてフラグメントを作成し、フラグメントの新しいインスタンスを返します。

どんな助けでも大歓迎です。

関連コード: アダプターのセットアップ方法:

mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.activity_comment);
mViewPager.setAdapter(mSectionsPagerAdapter);

アダプターの getItem 関数をオーバーライドします。

@Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a DummySectionFragment (defined as a static inner class
        // below) with the page number as its lone argument.

        switch(position) {
        case 0:
            return CommentsFragment.newInstance();

        case 1:
        default:
            return LikesFragment.newInstance();
        }
    }

フラグメントのクラスは静的であるため、 newInstance() 関数は単にそれ自体のインスタンスを返します。

4

4 に答える 4

9

あなたはこれをしなければなりません:

frag.getFragmentManager().beginTransaction().detach(frag).commit();
frag.getFragmentManager().beginTransaction().attach(frag).commit();
于 2013-10-30T09:59:46.897 に答える
7

タグでフラグメントを見つけることができますが、もちろん、フラグメントを追加するときにこのタグを付ける必要があります。

最初にタグを使用してフラグメントを追加します。

        fragmentManager = getFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        SomeFragment fragment = new ManageLinksFragment();
        fragmentTransaction.add(R.id.fragment_container1,fragment, "sometag");
        fragmentTransaction.commit();

そして、Activity のサイトで:

SomeFragment mSomeFragment = (SomeFragment) getFragmentManager().findFragmentByTag("sometag");
// now mSomeFragment.callsomething();
于 2013-10-30T08:30:42.983 に答える