美文网首页
【6】Fragment

【6】Fragment

作者: 嗟嗟嗟 | 来源:发表于2016-05-27 16:31 被阅读0次

    一、什么是Fragment

    fragment可以看做是一个依附于activity存在的布局,他必须在activity中被调用,不可单独出现(其生命周期也与activity一一对应),主要用来实现不同尺寸安卓设备的碎片化问题,可以让同一个应用在不同设备上有不同的显示效果。

    二、Fragment的生命周期

    和activity的生命周期一一对应。

    需要注意的是:fragment在创建时后于其依附的activity被创建,在销毁时先于其依附的activity被销毁。

    1、创建时:

    • onAttach()
    • onCreate()
    • onCreateView()
    • onActivityCreated()

    2、对用户可见:

    • onstart()
    • onResume()

    3、进入后台模式时:

    • onPause()
    • onstop()

    4、退出时:

    • onPause()
    • onStop()
    • onDestroyView()
    • onDestroy()
    • onDetach()

    三、Fragment的加载方式

    1、静态加载

    即直接将fragment的类名写在activity的布局文件中,通常需要用在onCreateView方法中用inflater方法将布局转换为view,再将其返回给activity调用。

    @Override
    
    publicView onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
        //将布局文件转化为一个view
        
        //需要加载的布局,父view,是否加入到父view中
        
        View view = inflater.inflate(R.layout.fragment,container,false);
        
        TextView textView = (TextView) view.findViewById(R.id.fragment_text);
        
        textView.setText("静态加载fragment");
        
        Button button = (Button) view.findViewById(R.id.fragment_button);
        
        button.setText("获取数据");
        
        button.setOnClickListener(newView.OnClickListener() {
        
        @Override
        
        public voidonClick(View view) {
        
        String text = getAaa();
        
        Toast.makeText(getActivity(),"text:"+text, Toast.LENGTH_SHORT).show();
        
        }
        
        });
        
        returnview;
    
    }
    

    2、动态加载

    即使用fragmentManager来动态加载到activity的某个布局中。

    Fragment fragment2 =newMyFragment2();
    
    FragmentManager fragmentManager = getFragmentManager();
    
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    
    //第一个参数:需要加入的布局
    
    //第二个参数:需要加入的fragment
    
    fragmentTransaction.add(R.id.frame,fragment2);
    
    fragmentTransaction.addToBackStack(null);//添加返回上一层的事务,否则按返回直接退出程序。
    
    fragmentTransaction.commit();//一定要在最后执行commit()事务,执行这个操作。
    

    四、Fragment与Activity之间的消息传递

    1、activity向fragement传递消息

    通过setArguments(bundle)和getArguments()方法即可。

    activity中

    Fragment fragment5 =newMyFragment5();
    
    Bundle bundle =newBundle();
    
    bundle.putString("name",text);
    
    fragment5.setArguments(bundle);
    

    fragment5中

    text= getArguments().get("name")+"";
    

    也可通过fragmentManager.findFragmentById(R.id.main4_fragment)的方式来静态传值。用的比较少,在此不详述。

    2、fragement向activity传递消息

    一般需要通过一个回调方法来传递消息。

    fragment中

    privateStringcode="Thank you,Activity!";
    
    privateMyListenerlistener;
    
    public interfaceMyListener{//此为回调接口
    
        public voidthink(String code);
    
    }
    @Override
    
    public voidonAttach(Context context) {
    
        listener= (MyListener) context;
        
        super.onAttach(context);
    
    }
    publicView onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
        //将布局文件转化为一个view
        
        View view = inflater.inflate(R.layout.fragment2,container,false);
        
        
        
        listener.think(code);//在初始化时执行回调方法。
        
        returnview;
    
    }
    

    activity中

    实现fragment中的接口即可获得消息。

    public class MainActivity4 extends Activity implements MyFragment5.MyListener{
    
        public void think(String code) {
        
        String code = code;
        
        }
    
    }
    

    相关文章

      网友评论

          本文标题:【6】Fragment

          本文链接:https://www.haomeiwen.com/subject/rlhfdttx.html