一,首先,Fragment是android應用中十分重要的一個功能,十分輕量化,也相似於activity同樣,是一個個佈局,能夠相互跳轉和傳遞參數。可是,它運行起來十分流暢,並且易於管理,下面是在學習時候看慕課網中的一些接受:android
Fragment在應用中應當是一個模塊化和可重用的組件,由於Fragment定義了它本身的佈局,以及經過使用它本身的生命週期回調方法定義了本身的行爲,你可要將Fragment包含到多個Activity中去。app
(1)Fragment能夠做爲Activity的一部分展示出來ide
(2)一個Activity能夠包含多個Fragment,一個Fragment也能夠在多個Activity中使用。模塊化
(3)Activity運行過程當中,能夠添加移除和替換Fragment函數
(4)Fragment能夠相應本身的輸入事件,而且有本身的生命週期,生命後期受宿主Activity的生命週期影響佈局
手機和平板的屏幕差異較大,利用Fragment能夠實現代碼的通用度較高,這樣在開發兩種app時候能夠改動較小實現。學習
二,android studio 2.2.2中帶fragment的activity的建立:網站
在某些網站學習時候,發如今早一些的版本的as中是能夠直接建立帶有fragment的activity的,在1.5以後就不支持了,也不是不支持,只是不能直接選擇了,在後面的步驟中能夠選擇。spa
1,首先,new一個新的工程,選擇basic activitycode
2,而後在下一步裏選擇帶有fragment
3,點擊finish咱們就完成了建立,建立完成後,咱們總體的文件佈局是這樣子的:
4,這樣子尚未完,在MainActivity中咱們還須要進行頁面加載的操做:
例如:咱們建立完後MainActivity是這樣子的(這樣是沒法運行的)
,咱們須要在裏面加一句話:
1 public class MainActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 8 setSupportActionBar(toolbar); 9 10 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 11 fab.setOnClickListener(new View.OnClickListener() { 12 @Override 13 public void onClick(View view) { 14 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 15 .setAction("Action", null).show(); 16 } 17 }); 18 19 //須要添加的語句: 20 if (savedInstanceState == null) { 21 getSupportFragmentManager().beginTransaction().add(R.id.fragment, new MainActivityFragment()).commit(); 22 } 23 }
5.1 在fragment_main 中添加一個按鈕,用來跳到下一個fragment頁面
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:id="@+id/content_main" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 android:paddingBottom="@dimen/activity_vertical_margin" 8 android:paddingLeft="@dimen/activity_horizontal_margin" 9 android:paddingRight="@dimen/activity_horizontal_margin" 10 android:paddingTop="@dimen/activity_vertical_margin" 11 android:orientation="vertical" 12 tools:context="examples.ouc.com.fragment.MainActivityFragment" 13 tools:showIn="@layout/activity_main"> 14 15 <TextView 16 android:layout_width="wrap_content" 17 android:layout_height="wrap_content" 18 android:text="Hello World!" /> 19 20 <Button 21 android:text="點我" 22 android:layout_width="match_parent" 23 android:layout_height="wrap_content" 24 android:id="@+id/btnShowAnotherFragment" /> 25 26 </LinearLayout>
5.2 在MainActivityFragment中對動做進行配置和代碼操做:
須要重寫onCreateView,而後獲取到頁面中的按鈕,而後添加事件監聽器
public class MainActivityFragment extends Fragment { public MainActivityFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { System.out.println("onCreateView"); View rootView = inflater.inflate(R.layout.fragment_main, container, false); rootView.findViewById(R.id.btnShowAnotherFragment).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getFragmentManager().beginTransaction() .addToBackStack(null) .replace(R.id.fragment,new AnotherFragment()) .commit(); } });
上面的代碼是跳到第二個fragment頁面,下面咱們對第二個Fragment進行建立和操做:
6.1首先建立一個layout的佈局文件,
而且在裏面添加一個按鈕,用來點擊返回上一個
取名fragment_another
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" android:layout_width="match_parent" 4 android:layout_height="match_parent"> 5 6 <TextView 7 android:text="這是另外一個fragment" 8 android:layout_width="match_parent" 9 android:layout_height="wrap_content" 10 android:id="@+id/textView" /> 11 12 <Button 13 android:text="BACK" 14 android:layout_width="match_parent" 15 android:layout_height="wrap_content" 16 android:id="@+id/btnBack" /> 17 18 </LinearLayout>
6.2而後咱們建立一個class讓它繼承自Fragment
//注意Fragment必定要導入的是:
import android.support.v4.app.Fragment;
1 public class AnotherFragment extends Fragment { 2 3 @Override 4 public void onCreate(@Nullable Bundle savedInstanceState) { 5 System.out.println("onCreate..."); 6 super.onCreate(savedInstanceState); 7 } 8 9 @Nullable 10 @Override 11 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 12 System.out.println("onCreateView..."); 13 View root = inflater.inflate(R.layout.fragment_another,container,false); 14 root.findViewById(R.id.btnBack).setOnClickListener(new View.OnClickListener() { 15 @Override 16 public void onClick(View v) { 17 getFragmentManager().popBackStack(); 18 } 19 }); 20 return root; 21 }
6.3注意,咱們裏面用到了popBackStack()函數,一看便知道,他用到了棧!
所以咱們在MainActivityFragment中,咱們獲取到了Fragment後,咱們寫了一個 addtoBackStack,若是咱們不須要添加後退功能,這個是不須要加的,只不是咱們一點返回鍵,app就會退出了~
1 getFragmentManager().beginTransaction() 2 .addToBackStack(null) 3 .replace(R.id.fragment,new AnotherFragment()) 4 .commit();
7,至此,咱們的fragment就完成了,能夠提交到模擬器運行了~~~