4

我在这里遇到了与这个问题几乎完全相同的问题:Android, How to restart/refresh a fragment from FragmentActivty?

ListFragment我正在尝试从 parent调用 a 的方法FragmentActivity

但是,我使用的是 Eclipse 生成的模板 Swipe + Fixed Tabs。我尝试调用getSupportFragmentManager().findFragmentById(R.id.myfragment)但返回值始终为空。我猜这可能是一个问题,因为我没有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 回答
3

您的片段由适配器管理。因此,您还必须调用适配器来刷新您的片段。这些步骤是必要的:

  1. 覆盖适配器中的 getItemPosition

    @Override
    public int getItemPosition(Object object) {
        // POSITION_NONE makes it possible to reload the PagerAdapter
        return POSITION_NONE;
    }
    
  2. 一旦你打了那个电话

    mViewPager.getAdapter.notifyDataSetChanged();
    

    在您的活动中。从片段对象本身,您可以使用回调来通知 Activity 需要刷新。

这将使用片段的新实例重新填充 viewPager,就像重新启动/刷新片段一样。

希望它有帮助,这就是你要找的。

于 2014-10-22T21:54:02.000 回答
1

getFragmentManager().beginTransaction().detach(this).attach(this).commit();

于 2017-09-27T13:28:01.917 回答