我在这里遇到与此问题几乎完全相同的问题:Android, How to restart/refresh a fragment from FragmentActivty?
我正在尝试从父ListFragment
调用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);
覆盖适配器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()函数只返回自己的一个实例,因为我的片段的类是静态的。
答案 0 :(得分:8)
你必须这样做:
frag.getFragmentManager().beginTransaction().detach(frag).commit();
frag.getFragmentManager().beginTransaction().attach(frag).commit();
答案 1 :(得分:6)
您可以通过标签找到您的片段,但当然您需要在添加片段时为其添加此标记。
首先使用标记添加您的片段:
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
SomeFragment fragment = new ManageLinksFragment();
fragmentTransaction.add(R.id.fragment_container1,fragment, "sometag");
fragmentTransaction.commit();
然后在活动的网站上:
SomeFragment mSomeFragment = (SomeFragment) getFragmentManager().findFragmentByTag("sometag");
// now mSomeFragment.callsomething();
答案 2 :(得分:3)
您的片段由适配器管理。因此,您还必须调用适配器来刷新片段。这些步骤是必要的:
在适配器中覆盖getItemPosition
@Override
public int getItemPosition(Object object) {
// POSITION_NONE makes it possible to reload the PagerAdapter
return POSITION_NONE;
}
一旦你做了那个电话
mViewPager.getAdapter.notifyDataSetChanged();
在你的活动中。从片段对象本身,您可以使用回调来通知Activity需要刷新。
这将使用片段的新实例重新填充viewPager,就像重新启动/刷新片段一样。
希望它有所帮助,这就是你要找的东西。
答案 3 :(得分:1)
getFragmentManager()的BeginTransaction()分离(本).attach(本).commit();