将片段发送到 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 尽管你说你不想这样做。

祝你好运,编码愉快!