Android基础之Fragment

Fragment的概述及作用

  • Fragment包含在Activity中,Fragment只能存在于Activity的上下文(context)内,没有Activity就无法使用Fragment,因此Fragment只能在Activity的上下文(context)创建。Fragment可以作为Activity的一部分,Fragment和Activity非常相似,Fragment拥有一个与Activity相关的视图层次结构,拥有一个与Activity非常相似的生命周期。
  • 为什么要使用Fragment
    Activity的使用局限:不能将多个Activity界面放在屏幕上一并显示。因此创建了Fragment来弥补Activity的局限。Fragment可以像Activity一样响应Back键等类似Activity的功能。

Fragment的生命周期

  • onAttach()
    当fragment和activity被关联时调用。

  • onCreate()
    当fragment创建时被调用,你应该初始化一些实用的组件,比如在fragment暂停或停止时需要恢复的

  • onCreateView()
    当系统调用fragment在首次绘制用户界面时,如果画一个UI在你的fragment你必须返回一个View当然了你可以返回null代表这个fragment没有UI.

  • onActivityCreated()
    当activity的onCreate()方法返回时调用。

  • onResumed()
    在running状态下的可见状态。

  • onPaused()
    另一个activity在前景运行,并且享有焦点,但是这个fragment所在的activity仍然可见(前景activity部分遮挡或者是半透明的)。

  • onStop()
    fragment不可见。可能是因为宿主activity处于stopped状态,或者fragment被remove掉,然后加在了back stack中。
    一个处于stopped状态的activity还是存活状态的,所有的状态和成员信息会被系统保持。但是,它不再被用户可见,并且如果宿主activity被kill掉,它也会被kill掉。

  • onDestroyView()
    当fragment的UI被移除的时候调用。

  • onDetach()
    当fragment和activity去关联时调用。

代码中创建Fragment

FragmentManager fm = getSupportFragmentManager();  
        mContentFragment = (ContentFragment) fm.findFragmentById(R.id.id_fragment_container);  

        if(mContentFragment == null )  
        {  
            mContentFragment = new ContentFragment();  
            fm.beginTransaction().add(R.id.id_fragment_container,mContentFragment).commit();  
        }  

add(R.id.id_fragment_container,mContentFragment)中的布局的id一方面,是告知FragmentManager,此fragment的位置;另一方面是此fragment的唯一标识;我们通过fm.findFragmentById(R.id.id_fragment_container)查找

Activity响应Fragment中的点击事件

场景:在一个Fragment里面按下一个按钮,然后Activity中根据Fragment中传递过来的参数执行相应的方法。在MyFragment中定义这样的接口

    public interface OnButton2ClickListener {
        public void OnButton2ClickListener(String showText);
    }
    @Override
    public void onAttach(Activity activity) {
        // TODO Auto-generated method stub
        super.onAttach(activity);
        try {
            mListener = (OnButton2ClickListener) activity;
        } catch (Exception e) {
            // TODO: handle exception
            throw new ClassCastException(activity.toString() + "must implement OnButton2ClickListener");
        }
    }
    public void Click(View view){
         String showText = "tempTest";
         mListener.OnButton2ClickListener(showText);
         break;
}

在MainActivity中实现接口OnButton2ClickListener

public class MainActivity extends Activity implements OnClickListener, 
        OnButton2ClickListener {
    @Override
    public void OnButton2ClickListener(String showText) {
        // TODO Auto-generated method stub
        TextView tv_activity = (TextView) findViewById(R.id.tv_activity);
        tv_activity.setText(showText);
    }
}

fragment和Activity之间的通信

  • fragment控制fragment:得到一个Activity,然后通过这个Activity的getFragmentManager()获得该Fragment的实例。

  • fragment控制Activity:这个很简单。每个Fragment都有getActivity()得到一个活动。MainActivity activity=getActivity();

  • Activity控制fragment:xxxFragment xxx=getFragmentManager().findFragmentById();

  • Activity控制Activity:这个显然是通过Intent活动之间的通信完成。别忘了在被打开的活动中创建Intent和得到Intent一起进行,写个静态的actionStart()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值