項目中用靜態加載的時候不多,所以懶得寫他了,直接寫動態加載的內容。
1.是用App包下的Fragment還是v4包下的:
- 首先,Fragment、FragmentManager、FragmentTransaction必須統一,要用App包下的,都用App包下的,要用v4包下的都用v4包下的,否則會出錯。
- Fragment是Android 3.0(API 11)後引入的,如果要求3.0以下手機也能正常運行,選擇V4包下的比較合適,但是所在的Activity則必須繼承FragmentActivity,而且獲取FragmentManage的方式要用getSupportFragmentManager。
- 如果不要求Android 3.0(API 11)以下的手機能正常運行,還是選擇App包下的吧。
2.Fragment家族常用的API
Fragment常用的三個類:
android.app.Fragment 主要用於定義Fragment
android.app.FragmentManager 主要用於在Activity中操作Fragment
android.app.FragmentTransaction 保證一些列Fragment操作的原子性
a、獲取FragmentManage的方式:
app包中:getFragmentManager()
v4包中:getSupportFragmentManager
b、主要的操作都是FragmentTransaction的方法
FragmentTransaction transaction = fm.benginTransatcion();//開啓一個事務
transaction.add()
往Activity中添加一個Fragment
transaction.remove()
從Activity中移除一個Fragment,如果被移除的Fragment沒有添加到回退棧(回退棧後面會詳細說),這個Fragment實例將會被銷燬。
transaction.replace()
使用另一個Fragment替換當前的,實際上就是remove()然後add()的合體~
transaction.hide()
隱藏當前的Fragment,僅僅是設爲不可見,並不會銷燬
transaction.show()
顯示之前隱藏的Fragment
detach()
會將view從UI中移除,和remove()不同,此時fragment的狀態依然由FragmentManager維護。
attach()
重建view視圖,附加到UI上並顯示。
transatcion.commit()//提交一個事務
3.動態加載流程
- 獲取FragmentManager對象: getFragmentManager()//getSupportFragmentManager()
- 獲取beginTransaction對象: fManager.beginTransaction()
- 調用add()或replace()方法加載Fragment: fTransaction.add(要傳入的對象,fragment對象) // fTransaction.replace(要傳入的對象,fragment對象)
commit()提交
4.核心代碼
public class MainActivity extends Activity implements OnClickListener
{
private LinearLayout mTabWeixin;
private LinearLayout mTabFriend;
private ContentFragment mWeixin;
private FriendFragment mFriend;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
// 初始化控件和聲明事件
mTabWeixin = (LinearLayout) findViewById(R.id.tab_bottom_weixin);
mTabFriend = (LinearLayout) findViewById(R.id.tab_bottom_friend);
mTabWeixin.setOnClickListener(this);
mTabFriend.setOnClickListener(this);
// 設置默認的Fragment
setDefaultFragment();
}
private void setDefaultFragment()
{
FragmentManager fm = getFragmentManager(); //獲取FragmentManager對象
FragmentTransaction transaction = fm.beginTransaction();//獲取beginTransaction對象
mWeixin = new ContentFragment();
transaction.replace(R.id.id_content, mWeixin);//加載Fragment
transaction.commit(); //提交
}
@Override
public void onClick(View v)
{
FragmentManager fm = getFragmentManager();
// 開啓Fragment事務
FragmentTransaction transaction = fm.beginTransaction();
switch (v.getId())
{
case R.id.tab_bottom_weixin:
if (mWeixin == null)
{
mWeixin = new ContentFragment();
}
// 使用當前Fragment的佈局替代id_content的控件
transaction.replace(R.id.id_content, mWeixin);
break;
case R.id.tab_bottom_friend:
if (mFriend == null)
{
mFriend = new FriendFragment();
}
transaction.replace(R.id.id_content, mFriend);
break;
}
// transaction.addToBackStack();
// 事務提交
transaction.commit();
}
}