android studio 2.2.2下fragment的創建和跳轉


一,首先,Fragment是android應用中十分重要的一個功能,十分輕量化,也類似於activity一樣,是一個個布局,可以相互跳轉和傳遞參數。但是,它運行起來十分流暢,而且易於管理,下面是在學習時候看慕課網中的一些接受:

Fragment在應用中應當是一個模塊化和可重用的組件,因為Fragment定義了它自己的布局,以及通過使用它自己的生命周期回調方法定義了自己的行為,你可要將Fragment包含到多個Activity中去。

(1)Fragment可以作為Activity的一部分展現出來

(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之后就不支持了,也不是不支持,只是不能直接選擇了,在后面的步驟中可以選擇。

1,首先,new一個新的工程,選擇basic activity

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     }
MainActiviy

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>
fragment_main

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();
            }
        });
MainActivityFragment

  上面的代碼是跳到第二個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>
fragment_another

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     }
AnotherFragment

6.3注意,我們里面用到了popBackStack()函數,一看便知道,他用到了棧!

  因此我們在MainActivityFragment中,我們獲取到了Fragment后,我們寫了一個     addtoBackStack,如果我們不需要添加后退功能,這個是不需要加的,只不是我們一點返回鍵,app就會退出了~

1  getFragmentManager().beginTransaction()
2                         .addToBackStack(null)
3                         .replace(R.id.fragment,new AnotherFragment())
4                         .commit();

 

 

7,至此,我們的fragment就完成了,可以提交到模擬器運行了~~~

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM