2011-08-21 125 views
4

在开发人员指南中,据说可以在运行时以编程方式将Fragment添加到现有的ViewGroup。我的问题是:这个ViewGroup如何链接到应用程序?将片段添加到ViewGroup

到目前为止,我试图在描述应用程序布局的xml文件中声明ViewGroup。但是,当我尝试使用public abstract FragmentTransaction add (int containerViewId, Fragment fragment, String tag)函数向其添加Fragment时,我的应用程序崩溃(不立即,但在我的应用程序的onCreate函数结束时)。

我实际上想要做的是在我的应用程序中管理多个视图(实现为Fragment),并根据用户的选择在它们之间切换。我应该在我的方法中添加(或更改)什么?

在此先感谢您花费时间来帮助我。

+0

在Eclipse中使用'adb logcat',DDMS或DDMS透视图来检查LogCat并查看与崩溃相关的堆栈跟踪。 – CommonsWare

回答

5

的ViewGroup可以是简单的框架布局

<FrameLayout 
android:id="@+id/fragmentForChange" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
/> 

然后和你一起片段,你需要做的替换此框架NEX:

Bundle args = new Bundle();   
// add needed args 

//create fragment and set arguments  
Fragment fragment= MyFragment(); 
fragment.setArguments(args) 

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
// getSupportFragmentManager - uses for compatible library instead of getFragmentManager 

//replace frame with our fragment 
ft.replace(R.id.fragmentForChange,fragment); 
//set type of animation 
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 

//finish transaction 
ft.commit(); 

您可以隐藏或交易的演出片段,片段命令:

ft.hide(fragment);   
ft.show(fragment);   
+0

添加不会取代。 –

1

我不知道你的死机原因可能是什么,因为你没有提供详细信息s,只是给你发一条提示(它对我很有用,而且不像Fragment API那么直观)。请记住,在FragmentTransaction中创建的Fragment不是立即添加的,而是根据其自己的判断(稍后,可能在UI线程不忙时),因此片段的getView()调用可能会在一段时间内返回null ,这可能是导致事故的原因。

我不明白为什么Google这样设计它,因为其余的API是同步的 - 而且更加令人困惑 - 如果您创建Fragment作为XML布局的一部分(使用inflater),它会被创建同步以及getView总是返回值。

这是可能的解决方法:如果您将ViewGroup创建为另一种布局通货膨胀处理的一部分,它可能适用于您。