Fragment的使用

本文详细介绍了Fragment在Android开发中的静态及动态使用方式,包括布局文件配置、常见方法如add、replace等的使用技巧,并探讨了Fragment与Activity之间的通信方法。

静态使用

 <fragment  
        android:id="@+id/id_fragment_title"  
        android:name="com.zhy.zhy_fragments.TitleFragment"  
        android:layout_width="fill_parent"  
        android:layout_height="45dp" /> 
在布局中使用:idname需要注意 
public class TitleFragment extends Fragment  
{  

    private ImageButton mLeftMenu;  

    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  
            Bundle savedInstanceState)  
    {  
        View view = inflater.inflate(R.layout.fragment_title, container, false);  
        mLeftMenu = (ImageButton) view.findViewById(R.id.id_title_left_btn);  
        mLeftMenu.setOnClickListener(new OnClickListener()  
        {  
            @Override  
            public void onClick(View v)  
            {  
                Toast.makeText(getActivity(),  
                        "i am an ImageButton in TitleFragment ! ",  
                        Toast.LENGTH_SHORT).show();  
            }  
        });  
        return view;  
    }  
}  

动态的使用

 <FrameLayout  
        android:id="@+id/id_content"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:layout_above="@id/id_ly_bottombar"  
        android:layout_below="@id/id_fragment_title" />

        这是在布局中的一个帧布局 
 FragmentManager fm = getFragmentManager();  
        FragmentTransaction transaction = fm.beginTransaction();  
        mWeixin = new ContentFragment();  
        transaction.replace(R.id.id_content, mWeixin);  
        transaction.commit();

        这里的R.id.id_content就是那个帧布局 --事务一定要提交才管用
当使用3.0以下的版本的话 需要使用 getSupportFragmentManager()

FragmentTransaction常用API

  • transaction.add() 在Activity中添加一个Fragment
  • transaction.remove() 从Activity中移除一个Frg,如果Frg没有添加到返回栈中就会被销毁
  • transaction.replace() 使用另外一个Frg替换当前的Frg实际上就是add和remove的集合
  • transaction.hide() 隐藏当前的Frg仅仅设置为不可见,并不会销毁
  • transaction.show() 显示之前隐藏的Frg
  • transaction.detach() 将View从UI中移除,和remove()不同在此时Frg依然会被FragmentManager所维护
  • transactin.attach() 重建Viwe视图附加到UI上
    注意:可能会经常遇到这样Activity状态不一致:State loss这样的错误。主要是因为:commit方法一定要在Activity.onSaveInstance()之前调用。

关于如何添加一个Fragment事务到回退栈

 FragmentManager fm = getFragmentManager();  
        FragmentTransaction transaction = fm.beginTransaction();  
        transaction .add(R.id.id_content , fThree, "THREE");   
        transaction .addToBackStack(null);  
        transaction .commit();

        对于回退张的理解:类比Activity返回栈的效果,一次事务的操作不就是把旧的Frg隐藏移除啊等新的Frg显示,那么这个新的Frg就在Activity上覆盖一层这么比较好理解,返回键是返回的栈中的界面,移除top显示下面的界面,想象一下效果就好  

Fragement和Activity的通信

  • 如果你Activity中包含自己管理的Fragment的引用,可以通过引用直接访问所有的Fragment的public方法
  • 如果Activity中未保存任何Fragment的引用,那么没关系,每个Fragment都有一个唯一的TAG或者ID,可以通过getFragmentManager.findFragmentByTag()或者findFragmentById()获得任何Fragment实例,然后进行操作。
  • 在Fragment中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值