Fragment的静态加载方式显得过于死板,而动态方式则是在程序运行过程中可以对Fragment进行操作,动态地添加碎片,add、
remove等等。
接着上一节的代码,Fragment的布局文件仍是fragment1.xml这个,先来创建Fragment类:
package com.example.fragmenttest;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MyFragment2 extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment1, container, false);
TextView tv=(TextView) view.findViewById(R.id.fg_tv);
tv.setText("动态加载。。");
return view;
}
}
Fragment类创建好以后,要想动态加载,需要对Fragment处理事务,(增删改查),之后需要commit提交事务,如果通过back
返回上一个Fragment,需要在commit前加addToBackStack返回栈。
package com.example.fragmenttest;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
public class MainActivity extends Activity {
private RadioGroup rg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rg = (RadioGroup) findViewById(R.id.main_rg);
rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
switch (checkedId) {
case R.id.main_bt:
Intent intent=new Intent();
intent.setClass(MainActivity.this, MainActivity2.class);
startActivity(intent);
break;
case R.id.main_bt1:
MyFragment2 fragment=new MyFragment2();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
beginTransaction.add(R.id.main_ll, fragment);
beginTransaction.addToBackStack(null);
beginTransaction.commit();
break;
case R.id.main_bt2:
break;
case R.id.main_bt3:
break;
default:
break;
}
}
});
}
}
MyFragment2 fragment=new MyFragment2();//创建Fragment的实例
FragmentManager fragmentManager = getFragmentManager();//获得Fragment的管理者
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();//开启Fragment事务
beginTransaction.add(R.id.main_ll, fragment);
main_ll是在Activity的布局文件activity_main中提前预留好的导航栏上部分视图。
<LinearLayout
android:id="@+id/main_ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
></LinearLayout>
<RadioGroup
android:id="@+id/main_rg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
>
<RadioButton
android:id="@+id/main_bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_launcher"
android:text="静态加载"
android:gravity="center_horizontal"
android:layout_weight="1"
android:background="@drawable/gray_selector"
android:button="@null"
/>
<RadioButton
开启事务后可以对Fragment进行add、remove、等操作。
需要注意一点:当按下Back返回键时会直接退出,如果想要返回上一个Fragment的状态,需要在commit之前加
addToBackStack返回栈。
在点击动态加载按钮时的效果图:
会在原来空白的视图添加Fragment的布局文件。一个textview和button。