指定的视图已具有父级-Android ViewPager

指定的视图已具有父级-Android ViewPager,android,android-viewpager,fragment,Android,Android Viewpager,Fragment,我目前正在试图理解一个异常,它在一切正常时突然出现。我有一个ViewPager和两个片段,我在其中一个片段中调用了一个摄像头。意图完成时,应用程序崩溃: E/AndroidRuntime(14095): java.lang.RuntimeException: Unable to start activity ComponentInfo{...}: java.lang.IllegalStateException: The specified child already has a parent.

我目前正在试图理解一个异常,它在一切正常时突然出现。我有一个ViewPager和两个片段,我在其中一个片段中调用了一个摄像头。意图完成时,应用程序崩溃:

E/AndroidRuntime(14095): java.lang.RuntimeException: Unable to start activity ComponentInfo{...}:
java.lang.IllegalStateException: The specified child already has a parent. You must call
removeView() on the child's parent first.
以下是我的onCreateView代码:

switch (index) {
case 1:
    rootView = frag_capture(rootView, inflater, container);
    break;
case 2:
    rootView = frag_notepad(rootView, inflater, container);
    break;
}
在相应的功能中:

int resId = R.layout.<corresponding fragment>;

rootView = inflater.inflate(resId, container, false);
((ViewPager) container).addView(rootView, 0);

我发现我丢失了部分代码并从存储库中取回,但这不是唯一的问题

我使用了一些函数,其中使用了当前视图而不是片段中的rootView。我添加了一个参数,以便在这些函数中使用它,它起了作用

此外,该设备最近有一个新的安全应用程序,它阻止了媒体捕获并使我的应用程序崩溃。当我停用时,它又能正常工作了


感谢您的回答,它使我纠正了一个旧错误,该错误只在一个特定设备上困扰我,但非常烦人。

您应该在ViewPage中使用适配器。此代码来自我的内部类占位符片段。这在我的activity onCreate方法中:mviewpage=ViewPager findviewbydr.id.pager;mViewPager.setAdapterSectionsPagerAdapter;那你为什么要调用viewpager.addView呢?适配器会处理它,因为当我不放置它时,应用程序会在启动时直接崩溃。应用程序会在启动时直接崩溃:什么样的异常?你能把适配器贴上去吗?
 public class SectionsPagerAdapter extends FragmentPagerAdapter {

    @Override
    public void unregisterDataSetObserver(DataSetObserver observer) {
        if (observer != null) {
            super.unregisterDataSetObserver(observer);
        }
    }

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return PlaceholderFragment.newInstance(position + 1);
    }

    @Override
    public int getCount() {
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
        case 0:
            return getString(R.string.title_section1).toUpperCase(l);
        case 1:
            return getString(R.string.title_section2).toUpperCase(l);
        }
        return null;
    }
}