我正在开发一个应用程序,在layoutlayout-small-portrait中,我希望启动一个名为SingleActivity的“容器活动”中包含的不同片段。我会在布局中处理这个问题,但这与我的问题无关。
我有一个activitylayout-land如名称所示,它是我的应用程序的主活动(启动程序)。这将首先包含一个layout-large和不同的项目,供用户按。
根据用户按下的项目,将启动MainActivity,其内容将对应于与此项目相关的特定ListFragment。我的问题从这里开始。当用户按下一个项目时,我有一个对应片段的引用,我想在SingleActivity中显示。如下图所示:

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

活动已成功启动。在Fragment中,我有以下SingleFragment方法:
...

// 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();

...

我怀疑SingleActivity总是onCreate()是因为片段还没有膨胀。如果我是对的,我需要做的是在片段膨胀之前定义它的标记,这样可以通过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();
    }

标记字符串需要具有片段的包位置,如“com.android.myprojectname.myfragment”

10-08 03:08