zoukankan      html  css  js  c++  java
  • android学习笔记Fragment的使用

      Fragment的内容感觉好多啊,主要需要掌握Fragment静态加载,Fragment动态加载,Fragment的生命周期,Fragment与Activity的交互

      1,Fragment的静态加载

      在activity的layout文件中声明Fragment,需要特别注意的是《fragment》中的android:name属性指定了在laytout中实例化的Fragemnt类

      标示Fragment的方法

      android:id 属性提供唯一的id

      android:name 属性提供唯一的name

      Fragment静态加载比较简单,可以当成普通的控件直接写在activity的布局中,

        <LinearLayout
            android:id="@+id/frame"
            android:orientation="vertical"
            android:layout_weight="0.8"
            android:layout_width="match_parent"
            android:layout_height="0dp">
    
            <fragment
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:name="com.example.lining.myapplication.MyFragment"
                android:id="@+id/fragment1">
            </fragment>
    
    
        </LinearLayout>

    然后需要写一个类继承自Fragment,实现里面的onCreateView方法。该方法中加载自定义的MyFragment布局文件。如下方式

    public class MyFragment extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            //return super.onCreateView(inflater, container, savedInstanceState);
            /*
                把layout布局文件转换成view
                resource:要加载的布局文件
                container:加载layout的viewgroup
                attachToRoot:false 不返回viewgroup
             */
            View view = inflater.inflate(R.layout.fragment1,container,false);
            return view;
        }
    }



    当然肯定还得有Fragment的布局,

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" android:layout_height="match_parent"
        android:orientation="vertical">
    
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/fragment1text" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/fragment1btn" />
    
    </LinearLayout>

    上面的代码,一个静态加载就可以暂时完成了。

      2,动态加载

      拽写代码将fragment添加到activity中。add() :添加一个fragment(指定要添加的fragemnt和要插入的view)于此类似的还有remove 和 替换 replace。 

        处理fragment事务:根据用户的交互情况,对fragemnt进行添加,移除,替换以及执行其他动作,提交给activity的每一套动作成为一个事务  

      FragmentManager fragmentManager = getFragmentManager(); 

        FragmentTransaction fragmentTransaction = fragmentManaget.beginTransaction();

      每一套事务都是同时执行一套变化,可以在一套事务中设置你所有想执行的变化。包括add(),replace,remove 然后提交给activity 。必须调用commit()方法

      如果允许用户通过back键返回到前一个fragment调用commit之前可以加入addtobackstack方法

     myFragment2 = new MyFragment2();
     FragmentManager fragmentManager = getFragmentManager();
     FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
     beginTransaction.add(R.id.frame,myFragment2);
     beginTransaction.addToBackStack(null);
     beginTransaction.commit();

      R.id.frame 就是fragment的父view。

      3,Fragment的生命周期

      开启应用:onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume

      隐藏应用:onPause->onStop

      恢复应用:onStart->onResume

      切换其他Fragment:onPause->onStop->onDestroyView

      返回该Fragment:onCreateView->onActivityCreated->onStart->onResume

      退出应用:onPause->onStop->onDestroyView->onDestroy->onDeAttach

      

      4,Fragment与Activity交互

      Activity->Fragment  : 这个只需要在activity中保存fragment的引用,就可以直接调用fragment的方法,进行传值等等。如果没有保存fragment的引用,那么

                  就需要通过getFragmentManager.findFragmentByTag()或者findFragmentById()获得任何Fragment实例,然后进行操作。

      Fragment->Activity  : 在Fragment中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作。

    public class MyFragment2 extends Fragment implements View.OnClickListener{
    private TextView textView;
    private Button btn;
    private MyListening myListening;
    public interface MyListening
    {
    void thank(String str);
    }
    @Override
    public void onAttach(Activity activity) {
    myListening = (MyListening)activity;
    super.onAttach(activity);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //return super.onCreateView(inflater, container, savedInstanceState);
    View view = inflater.inflate(R.layout.fragment1,container,false);
    btn = (Button)view.findViewById(R.id.fragment1btn);
    btn.setOnClickListener(this);
    textView =(TextView) view.findViewById(R.id.fragment1text);
    return view;
    }
    public void setText(String name){
    textView.setText(name);
    }
    @Override
    public void onClick(View v) {
    myListening.thank("i am fragment");
    }

    }
    
    

    然后在Acitvity中实现该接口就行。

        @Override
        public void thank(String str) {
    
            Toast.makeText(getBaseContext(),str,Toast.LENGTH_LONG).show();
        }
  • 相关阅读:
    (转)js的左右滑动触屏事件
    (转)Document对象内容集合
    AppCan相关网站
    (转)iOS应用程序生命周期(前后台切换,应用的各种状态)详解
    (转)深入浅出 iOS 之生命周期
    (转)iphone数据存储之-- Core Data的使用
    (转)xcode5.0.2下国际化图文解说
    (转)IOS之Info.plist文件简介
    Note_Master-Detail Application(iOS template)_06_ YJYDetailViewController.h
    Note_Master-Detail Application(iOS template)_07_ YJYDetailViewController.m
  • 原文地址:https://www.cnblogs.com/techdreaming/p/4957533.html
Copyright © 2011-2022 走看看