我在应用程序中使用“滑动菜单”库。
滑动菜单是一个片段。
打开时,蓝色部分是滑动菜单。
红色部分是静态的,它没有变化,是主要活动。
黄色部分是用户单击滑动菜单项时更改的片段。
当我实现它时,这是错误的:
在滑动菜单片段中,我侦听OnItemClick事件,然后根据单击的项目的位置创建一个新片段。
之后,我用片段替换了黄色的框架ID。
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
Fragment frag = null;
switch (arg2) {
case 1:
frag = new ExpFragment();
break;
case 2:
frag = new FormFragment();
break;
case 3:
frag = new CompFragment();
break;
default:
frag = new ContactFragment();
break;
}
transaction.replace(R.id.fragment, frag);
transaction.commit();
}
看起来不错吧?好吧,不。这是我遇到的logcat异常。
06-13 09:28:29.739: E/AndroidRuntime(15422): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
因此,如果有人有线索,或者可以告诉我要看什么,那真是太棒了!
TL; DR:有2个片段(浅色和黄色),蓝色必须改变黄色。给我一个例外。
谢谢,
编辑:布局文件:
activity_main:https://gist.github.com/dommerq/5771887
一个片段项目示例:https://gist.github.com/dommerq/5771892
最佳答案
答案在我的Java代码片段中。
我有:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(com.quentindommerc.flatme.R.layout.f_contact, container);
return v;
}
我应该有:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(com.quentindommerc.flatme.R.layout.f_contact, container, false);
return v;
}
因此,基本上,在inflate方法中,将“ false”作为第三个参数。
编辑:纠正了拼写错误。
关于android - fragment 更改的滑动菜单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17081560/