【问题标题】:Pass message from Activity to a programatically created Fragment将消息从 Activity 传递到以编程方式创建的 Fragment
【发布时间】:2014-01-16 13:36:24
【问题描述】:

美好的一天,你们这些了不起的人!这是我的情况。我想根据 ActionBar 中的选项刷新嵌套片段的内容。该片段有一个 ListView,如果选择了第一个 ActionBar 选项,则应显示一个列表,如果选择了第二个选项,则应显示另一个列表。假设我的 ActionBar 中有几个选项(“All”“Highlighted”)。

所需的片段在 TabHost 中,它有一个 ViewPager。

<TabHost>

<LinearLayout>

    <TabWidget
        android:id="@android:id/tabs" />

    <FrameLayout
        android:id="@android:id/tabcontent" />

    <android.support.v4.view.ViewPager
        android:id="@+id/pager" />

</LinearLayout>

另外,这是我添加标签的方式:

mHomeTabsAdapter.addTab(mTabHost.newTabSpec("controls").setIndicator("CONTROLS"), ControlsFragment.class, null);

由于我以编程方式添加片段,因此我不能给它一个 id 并使用 FragmentManager 通过 ID 找到它。如何获得对 ControlsFragment 的引用,以便我可以从 MainActivity 的 onNavigationItemSelected 刷新它?

在理想情况下,我应该能够在 onNavigationItemSelected 中获得对片段的引用,并重新实例化为列表提供项目的适配器。

我阅读了通讯文章 (http://developer.android.com/training/basics/fragments/communicating.html),但恐怕它对我不起作用。有人有建议吗?

【问题讨论】:

标签: android fragment


【解决方案1】:

使用标签!

当你进行交易时,你可以指定一个标签。

 FragmentTransaction.add(Fragment fragment, String tag);

你可以用

找到片段
 FragmentManager.findFragmentByTag(String tag);

【讨论】:

  • 不幸的是,我没有进行交易。我正在使用 FragmentStatePagerAdapter 将项目同步并提供给 TabHost 和 ViewPager。在内部,适配器以下列方式为我提供了正确的片段:@Override public Fragment getItem(int position) { TabInfo info = mTab​​s.get(position);片段片段 = Fragment.instantiate(mContext, info.clss.getName(), info.args);返回片段; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
相关资源
最近更新 更多