activity托管fragment的方式
在activity托管一个UI fragment,有2种方式
1、添加fragment到activity布局中;
2、在activity代码中添加fragment(唯一一种可以在运行时控制fragment的方式)
方式一:添加fragment到activity布局中
修改activity布局文件(activity_hello_moon.xml)如下:
步骤1:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
<fragment xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/helloMoonFragment" android:layout_width="match_parent" android:layout_height="match_parent"
android:name="com.example.q.tinaxu.hellomoon.HelloMoonFragment"> //(新增)
</RelativeLayout>
</fragment>
步骤2:
修改HelloMoonActivity类的超类为FragmentActivity
public class HelloMoonActivity extends Activity {
public class HelloMoonActivity extends FragmentActivity {
注:在Android Studio中(maybe跟Android API有关)activity父类为 AppCompatActivity(是FragmentActivity的子类)
public class AppCompatActivity extends FragmentActivity implements AppCompatCallback,
TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider {
方式二:在activity代码中添加fragment
在代码中添加fragment,需要借助于FragmentManager类,在被托管的activity中,包含FragmentManager类,FragmentManager类负责管理fragment并将它们的视图添加到activity的视图层级结构中。
FragmentManager fm = getFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);
if(fragment == null)
{
fragment = new CrimeFragment();
fm.beginTransaction().add(R.id.fragmentContainer, fragment).commit();
}
使用布局fragment的缺点:
1、可覆盖fragment的生命周期方法,以响应各种事件。但无法控制调用这些方法的时机。
2、无法提交移除、替换、分离布局fragment的事务。activity被创建后,即无法做出任何改变。
3、无法附加argument给fragment。附加argument必须的fragment创建后,并且被添加给FragmentManager之前完成。