从父活动中刷新片段

l3u*_*fly 3 eclipse android android-fragments android-fragmentactivity

我这里的问题与问题几乎完全相同:Android,如何从FragmentActivty重新启动/刷新片段?

我试图ListFragment从父母那里调用a的方法FragmentActivity.

但是,我正在使用eclipse生成的模板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);
Run Code Online (Sandbox Code Playgroud)

覆盖适配器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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

newInstance()函数只返回自己的实例,因为我的片段的类是静态的.

Har*_*thi 8

你必须这样做:

frag.getFragmentManager().beginTransaction().detach(frag).commit();
frag.getFragmentManager().beginTransaction().attach(frag).commit();
Run Code Online (Sandbox Code Playgroud)

  • 你能详细说明一下吗?我应该把它放在哪里?frag变量是我的一个片段吗? (2认同)

Kri*_*her 6

您可以通过标签找到您的片段,但当然您需要在添加片段时为其添加此标记.

首先使用标记添加片段:

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

然后在活动的网站上:

SomeFragment mSomeFragment = (SomeFragment) getFragmentManager().findFragmentByTag("sometag");
// now mSomeFragment.callsomething();
Run Code Online (Sandbox Code Playgroud)