Fragment动态加载

项目中用静态加载的时候不多,所以懒得写他了,直接写动态加载的内容。

1.是用App包下的Fragment还是v4包下的:

  1. 首先,Fragment、FragmentManager、FragmentTransaction必须统一,要用App包下的,都用App包下的,要用v4包下的都用v4包下的,否则会出错。
  2. Fragment是Android 3.0(API 11)后引入的,如果要求3.0以下手机也能正常运行,选择V4包下的比较合适,但是所在的Activity则必须继承FragmentActivity,而且获取FragmentManage的方式要用getSupportFragmentManager。
  3. 如果不要求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();  
    }  

}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值