我正在开发一个应用程序,在布局layout-small-portrait
中,我想启动名为SingleActivity
的单个“容器 Activity ”中包含的不同 fragment 。我将在布局 layout-land
、layout-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/