Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android——Fragment介紹及兩種基本使用方法

Android——Fragment介紹及兩種基本使用方法

編輯:關於Android編程

 

今天在調ViewPager的時候,感覺ViewPager+Fragment這種做法更靈活,所以,現在拿出來Fragment再整理下。

 

一,為什麼要用Fragment

 

1,靈活布局

Fragment表現Activity中用UI的一個行為或者一部分。可以組合多個fragment放在一個單獨的activity中來創建一個多界面區域的UI,並可以在多個activity裡重用某一個fragment。把fragment想象成一個activity的模塊化區域,有它自己的生命周期,接收屬於它的輸入事件,並且可以在activity運行期間添加和刪除。加入了Fragment,可以根據用戶或設備的需要,activity界面可以在運行時組裝,甚至是重新組裝。

另外,從實現上說,采用fragment而不是activity進行應用的UI管理,可以繞開安卓系統activity規則的限制。

 

2,考慮到大屏設備

Android在3.0中引入了fragments的概念,主要目的是用在大屏幕設備上--例如平板電腦上,支持更加動態和靈活的UI設計。平板電腦的屏幕要比手機的大得多,有更多的空間來放更多的UI組件,並且這些組件之間會產生更多的交互.Fragment允許這樣的一種設計,而不需要你親自來管理viewhierarchy的復雜變化。通過將activity的布局分散到fragment中,你可以在運行時修改activity的外觀,並在由activity管理的back stack中保存那些變化。

 

二,Fragment的兩種基本使用方法

 

1,使用布局方式引入fragment

 

下面來用fragment寫一個簡單的布局,兩個fragment布到一個activity上面:

先是第一個fragment:

 

<framelayout android:background="#AFEEEE" android:layout_height="match_parent" android:layout_width="match_parent" tools:context="com.example.liuhuichao.projecttest.ExampleFragment" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">

    
    

</framelayout>

 

在oncreate裡面,加載這個fragment的布局文件及進行view的初始化:

 

 

public class ExampleFragment extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_example, container, false);
    }
}

 

 

第二個fragment,基本類似:

 

 

<framelayout android:background="#00FA9A" android:layout_height="match_parent" android:layout_width="match_parent" tools:context="com.example.liuhuichao.projecttest.ExampleFragmentTwo" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">

    
    

</framelayout>

 

 

 

public class ExampleFragmentTwo extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_example_fragment_two, container, false);
    }
}

 

 

Activity的布局:

 

 




    

    


 

 

activity裡面關聯兩個fragment:

 

 

public class MainFragmentActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainfragment);

        //獲得FragmentManager ,然後獲取FragmentTransaction
        FragmentManager fm=getFragmentManager();
        FragmentTransaction transaction=fm.beginTransaction();
        //用Fragment動態代替布局文件中內容
        transaction.replace(R.id.fragmentOne,new ExampleFragment());
        transaction.replace(R.id.fragmentTwo,new ExampleFragmentTwo());
        //提交事務
        transaction.commit();
    }

}

 

run下:

 

height=417

 

 

2,動態布局fragment

 

先說下,這種方式是推介方式,感覺挺能體現出靈活性來。

 

fragment還是用上面的兩個,activity布局改一下:

 

 



 

Activity代碼:

 

public class MainFragmentActivity extends AppCompatActivity {

    private Button btn_show_fragment1;
    private Button btn_show_fragment2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragmentmaintwo);
        btn_show_fragment1=(Button)findViewById(R.id.btn_show_fragment1);
        btn_show_fragment2=(Button)findViewById(R.id.btn_show_fragment2);

        btn_show_fragment1.setOnClickListener(new View.OnClickListener() {
            @Override

            public void onClick(View v) {
                FragmentManager manager=getFragmentManager();
                FragmentTransaction ft=manager.beginTransaction();
                ExampleFragment ef1=new ExampleFragment();
                /*
                * add是將一個fragment實例添加到Activity的最上層
                * replace替換containerViewId中的fragment實例,
                *   注意,它首先把containerViewId中所有fragment刪除,然後再add進去當前的fragment
                * */
                ft.add(R.id.fragment_container, ef1);
                ft.commit();
            }
        });
        btn_show_fragment2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager manager=getFragmentManager();
                FragmentTransaction ft=manager.beginTransaction();
                ExampleFragmentTwo ef2=new ExampleFragmentTwo();
                ft.add(R.id.fragment_container,ef2);
                ft.commit();
            }
        });

       /* setContentView(R.layout.mainfragment);

        //獲得FragmentManager ,然後獲取FragmentTransaction
        FragmentManager fm=getFragmentManager();
        FragmentTransaction transaction=fm.beginTransaction();
        //用Fragment動態代替布局文件中內容
        transaction.replace(R.id.fragmentOne,new ExampleFragment());
        transaction.replace(R.id.fragmentTwo,new ExampleFragmentTwo());
        //提交事務
        transaction.commit();*/
    }

}

 

感覺用FragmentManager跟FragmentTransaction來管理fragment的時候,很像事物。百度下原理瞅瞅,發現確實有那個意思。

 

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved