我正在开发一个应用程序,在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”