Android:无法加载选项卡。说 child 已经有 parent 了

标签 android android-fragments android-fragmentactivity

我有以下 FragmentActivity:

public class TabsActivity extends FragmentActivity {
private FragmentTabHost mTabHost;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabs);
    mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

    mTabHost.addTab(mTabHost.newTabSpec("Home").setIndicator("Home", getResources().getDrawable(R.drawable.hometab)),HomeTab.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("Explore").setIndicator("Explore", getResources().getDrawable(R.drawable.exploretab)),ExploreTab.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("Info").setIndicator("Info", getResources().getDrawable(R.drawable.infotab)),InfoTab.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("Social").setIndicator("Social", getResources().getDrawable(R.drawable.socialtab)),SocialTab.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("Contact").setIndicator("Contact", getResources().getDrawable(R.drawable.contacttab)),ContactTab.class, null);

    TabWidget tabWidget = mTabHost.getTabWidget();
    tabWidget.setStripEnabled(false);
    for(int i=0; i < tabWidget.getChildCount(); i++){
        tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bg);
        TextView tv = (TextView)tabWidget.getChildAt(i).findViewById(android.R.id.title);
        tv.setTextColor(this.getResources().getColor(R.color.white));
    }

    mTabHost.setOnTabChangedListener(new OnTabChangeListener() {

        @Override
        public void onTabChanged(String tabId) {
            Log.d("PAUL",tabId);
            if(tabId=="Home"){
                finish();
            }
            TabWidget tw = mTabHost.getTabWidget();
            for(int i=0; i < tw.getChildCount(); i++){
                TextView tabText = (TextView)tw.getChildAt(i).findViewById(android.R.id.title);
                if(tabText.getText()==tabId){
                    tabText.setTextColor(TabsActivity.this.getResources().getColor(R.color.tcmgreen));
                } else {
                    tabText.setTextColor(TabsActivity.this.getResources().getColor(R.color.white));
                }

            }
        }
    });

    Intent intent = getIntent();
    String tag = intent.getStringExtra("tab");
    Log.d("DEBUG",tag);
    mTabHost.setCurrentTabByTag(tag);

}

}

当用户点击“探索”选项卡时,出现以下错误:java.lang.IllegalStateException: 指定的子项已有父项。您必须先对 child 的 parent 调用 removeView()。这是我的 ExploreTab 类:

public class ExploreTab extends Fragment {
private ArrayList<Level> levels;
private TCMSQLiteHelper sqliteHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    sqliteHelper = new TCMSQLiteHelper(this.getActivity());
    levels = sqliteHelper.getAllLevels();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    Log.d("DEBUG","Explore Created");
    View v = inflater.inflate(R.layout.explorelist, container);

    return v;
}
}

这对我来说没有任何意义,因为我看不出哪里可能存在已加载 View 的问题。我在这里缺少什么?

最佳答案

onCreateView() 中,您应该传入第三个参数,false。第三个参数指定布局是否应将自身附加到 ViewGroup 容器

来自Fragments documentation :

In this case, this is false because the system is already inserting the inflated layout into the container—passing true would create a redundant view group in the final layout.

因此你的代码应该是:

View v = inflater.inflate(R.layout.explorelist, container, false);

关于Android:无法加载选项卡。说 child 已经有 parent 了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597901/

相关文章:

android - 如何使用 Butter Knife 在运行时绑定(bind)监听器?

android - 带有 intentfilter 的 fragment

java - 如何从 FragmentActivity 向 Fragment 传递参数

android - 如何在将 fragment 添加到 View 之前准备 fragment

php - 无法使用php+android从mysql检索数据

java - 检查复选框是否被选中返回空指针

java - 如何正确注释作为 Room 实体中主键一部分的对象变量?

android - IllegalStateException - Fragment.getResources

android - 将日期保存到共享首选项

android - 如何创建应用程序不活动时永不停止的前台服务