Android Fragment - 从一个视图移动到另一个视图? [英] Android Fragment - move from one View to another?

本文介绍了Android Fragment - 从一个视图移动到另一个视图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以先将 Fragment 添加到视图,然后分离"它,然后将其重新附加"到另一个视图吗?

在代码中,我想:

fragOne one = new fragOne();getSupportFragmentManager().beginTransaction().add(R.id.left, one, "tag").commit();getSupportFragmentManager().beginTransaction().分离(一个).提交();//或 .remove() 或 .addToBackStack(null).remove()getSupportFragmentManager().executePendingTransactions();getSupportFragmentManager().beginTransaction().add(R.id.right, one).commit();

但它抛出错误:

04-05 13:28:03.492: E/AndroidRuntime(7195): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.example.trybackstack/com.example.trybackstack.MainActivity}: java.lang.IllegalStateException:无法更改片段 fragOne 的容器 ID{40523130 #0 id=0x7f080000 标签}:原为 2131230720 现在为 2131230721

感谢您的帮助!

解决方案

我遇到了同样的问题,但我发现我真正需要的是重新设置片段的视图而不是片段本身,从而避免任何 fragmentManager 事务.

>

View vv = fragment.getView();ViewGroup parent = (ViewGroup)vv.getParent();parent.removeView(vv);newparent.addView(vv, layoutParams);

Can i first add a Fragment to a View, then "detach" it, and then "re-attach" it to another View?

In code, i want to:

fragOne one = new fragOne();
getSupportFragmentManager().beginTransaction()
        .add(R.id.left, one, "tag").commit();

getSupportFragmentManager().beginTransaction()
        .detach(one).commit();      // or .remove(), or .addToBackStack(null).remove()

getSupportFragmentManager().executePendingTransactions();

getSupportFragmentManager().beginTransaction()
        .add(R.id.right, one).commit();

But it throws error:

04-05 13:28:03.492: E/AndroidRuntime(7195): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.trybackstack/com.example.trybackstack.MainActivity}: java.lang.IllegalStateException: Can't change container ID of fragment fragOne{40523130 #0 id=0x7f080000 tag}: was 2131230720 now 2131230721

Thanks for help!

解决方案

I had the same problem but I found that what I really needed was to reparent the fragment's view and not the fragment itself, thus avoiding any fragmentManager transaction.

View vv = fragment.getView();
ViewGroup parent = (ViewGroup)vv.getParent();
parent.removeView(vv);
newparent.addView(vv, layoutParams);

这篇关于Android Fragment - 从一个视图移动到另一个视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆