将片段发送到 activity
Send a fragment to an activity
有没有办法将片段发送到 activity?或者有没有更好的实现方法适合我的使用?
我有一个 gameOneFrag 和 gameTwoFrag。
例如:我想从片段中打开其中一个 activity(取决于在片段中按下了哪个按钮)。我可以执行 FragmentTransaction 并将当前片段替换为任何游戏片段。但我宁愿打开一个新的 activity "GameActivity" 并发送一个 gameFragments 作为额外的东西。
我在想这样的事情:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//listView.getItemAtPosition(position).getFrag() instead of ;
Intent intent = new Intent(getActivity(), GameActivity.class);
intent.putExtra("GAME_TYPE", gameOneFrag );
startActivity(intent);
}
比GameActivityFragment
Fragment frag = getIntent().getExtras().getFragment("GAME_TYPE");
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(ff.getId(), frag)
.commit();
}
或者我真的必须让每个游戏都成为 activity 并完全跳过 GameActivity "container" 吗?
值得一提的是,我有一个游戏 class,我打算在其中存储片段。例如
Game one = new Game(new GameOneFragment());
我以后可以调用 one.getFragment();
您不能将 Fragment
作为 Intent
额外传递。相反,您可以传递一个标志。在您的第一个 Activity
中,定义一些常量。
public static final int FRAG_ONE = 0;
public static final int FRAG_TWO = 1;
当您确定要打开哪个 Fragment
第二个 Activity
时,通过 Intent
.
发送常量
intent.putExtra("GAME_TYPE", FRAG_ONE);
在您的第二个 Activity
中,您可以检索 Intent
个额外内容。
int flag = getIntent().getIntExtra("GAME_TYPE", 0);
现在您知道要加载哪个 Fragment
了。 switch 语句非常适合这个。
switch (flag) {
case ActivityOne.FRAG_ONE:
loadFragmentOne();
break;
case ActivityOne.FRAG_TWO:
loadFragmentTwo();
break;
default:
Log.e(getClass().getName(), "Could not load Fragment");
}
在我看来,我建议只用游戏 Fragment
替换容器,而不是开始一个新的 Activity
尽管你说你不想这样做。
祝你好运,编码愉快!
有没有办法将片段发送到 activity?或者有没有更好的实现方法适合我的使用?
我有一个 gameOneFrag 和 gameTwoFrag。
例如:我想从片段中打开其中一个 activity(取决于在片段中按下了哪个按钮)。我可以执行 FragmentTransaction 并将当前片段替换为任何游戏片段。但我宁愿打开一个新的 activity "GameActivity" 并发送一个 gameFragments 作为额外的东西。
我在想这样的事情:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//listView.getItemAtPosition(position).getFrag() instead of ;
Intent intent = new Intent(getActivity(), GameActivity.class);
intent.putExtra("GAME_TYPE", gameOneFrag );
startActivity(intent);
}
比GameActivityFragment
Fragment frag = getIntent().getExtras().getFragment("GAME_TYPE");
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(ff.getId(), frag)
.commit();
}
或者我真的必须让每个游戏都成为 activity 并完全跳过 GameActivity "container" 吗?
值得一提的是,我有一个游戏 class,我打算在其中存储片段。例如
Game one = new Game(new GameOneFragment());
我以后可以调用 one.getFragment();
您不能将 Fragment
作为 Intent
额外传递。相反,您可以传递一个标志。在您的第一个 Activity
中,定义一些常量。
public static final int FRAG_ONE = 0;
public static final int FRAG_TWO = 1;
当您确定要打开哪个 Fragment
第二个 Activity
时,通过 Intent
.
intent.putExtra("GAME_TYPE", FRAG_ONE);
在您的第二个 Activity
中,您可以检索 Intent
个额外内容。
int flag = getIntent().getIntExtra("GAME_TYPE", 0);
现在您知道要加载哪个 Fragment
了。 switch 语句非常适合这个。
switch (flag) {
case ActivityOne.FRAG_ONE:
loadFragmentOne();
break;
case ActivityOne.FRAG_TWO:
loadFragmentTwo();
break;
default:
Log.e(getClass().getName(), "Could not load Fragment");
}
在我看来,我建议只用游戏 Fragment
替换容器,而不是开始一个新的 Activity
尽管你说你不想这样做。
祝你好运,编码愉快!