android - 根据 Intent 给定的标识符向 Activity 添加不同的 fragment

标签 android android-layout android-fragments

我正在开发一个应用程序,在布局layout-small-portrait中,我想启动名为SingleActivity的单个“容器 Activity ”中包含的不同 fragment 。我将在布局 layout-landlayout-large 等中以不同的方式处理这个问题,但这与我的问题无关。

我有一个 Activity MainActivity,正如名称所示,它是我的应用程序的主要 Activity (启动器)。这最初将包含一个 ListFragment ,其中包含不同的项目供用户按下。

根据用户按下的项目,SingleActivity 将启动,其内容将对应于与该项目相关的特定Fragment。我的问题从这里开始。当用户按下某个项目时,我有一个对要在 SingleFragment 中显示的相应 fragment 的引用。如下图所示:

  String tag = myFragmentReference.getTag();
  Intent i = new Intent(this, SingleActivity.class);
  i.putExtra(SingleActivity.CONST_TAG, tag);
  startActivity(i);

Activity 成功启动。在 SingleActivity 中,我有以下 onCreate() 方法:

...

// Retrieve the fragment tag from the intent
String tag = getIntent().getStringExtra(CONST_TAG);
Fragment fragment = getSupportFragmentManager().findFragmentByTag(tag);

if(fragment == null) {
    // always end up here, this is my problem.
}

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragmentContainer, fragment);
ft.commit();

...

我怀疑 fragment 始终为 null 的事实是因为该 fragment 尚未膨胀。如果我是对的,我需要做的就是在 fragment 膨胀之前定义它的标签,以便可以通过 findFragmentByTag() 找到它。这可能吗?

如果有任何不清楚的地方,请告诉我。

我期待听到一些好主意!如果有更好或更聪明的方法来实现这一点,我很想听听您的想法!谢谢:)

最佳答案

由于您要跳转到另一个 Activity,因此它将有自己的 Fragment BackStack,并且该 Fragment 将不存在。

您必须按照以下方式在新 Activity 中膨胀 fragment :

String tag = intent.getStringExtra(CONST_TAG);

    if (getSupportFragmentManager().findFragmentByTag(tag) == null) {
        Fragment fragment = Fragment.instantiate(this, tag, extras);
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(R.id.fragmentContainer, fragment, tag);
        ft.commit();
    }

标签字符串需要包含 fragment 的包位置,例如“com.android.myprojectname.myfragment”

关于android - 根据 Intent 给定的标识符向 Activity 添加不同的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14366809/

相关文章:

android - 如何通过 API 启用 NFC 阅读器?

android - 自定义包含布局的 Textview

java - 如何强制android布局显示两个 View

android - 如何在没有 OutOfMemoryError 的情况下填充图像 ListView

android - 调用新 Activity 时出现 IllegalArgumentException

android - 将 EditText 值从 Fragment 传递到 Activity

android - 如何检测 android 应用程序是否正在使用 Espresso 运行 UI 测试

android - 它是android中的内存泄漏吗

android - 控制Android设备的 "Force Stop"和 "Uninstall"按钮

android - 更改自定义对话框标题的字体