1. 程式人生 > >Android入門筆記(一)

Android入門筆記(一)

一、UI fragment

1.1 為什麼要使用 fragment 和對託管的相關理解

       為了對元件進行更加靈活的控制,同時適應平板的大屏幕布局方式,所以引入 UI fragment 來對 UI 進行管理。fragment 類的作用與普通專案中的 avtivity 作用相同,都是負責建立並管理使用者介面,以及與模型介面進行互動。activity 對 fragment 進行託管:即 activity 在其檢視層裡提供一處位置,用來放置 fragment 檢視,但 fragment 本身是沒有再螢幕上顯示檢視的能力。因此,只有將它的檢視放置在 activity 的檢視層級結構中,fragment 檢視才能顯示在螢幕上。

1.2 怎樣通過 fragment 來建立一個專案

(1)在 java/專案名稱 目錄下建立對 fragment 進行託管且繼承 AppCompatActivity 類的 activity 類,命名為如:LearnActivity.java

(2)在 res/layout 下建立託管容器佈局檔案,如:activity_learn.xml

(3)將託管容器檢視檔案的檢視設定為 FrameLayout ,並設定其 id ,如:fragment_container

(4)在 java/專案名稱 目錄下建立相關且繼承 Fragment 類的 fragment 類,如:LearnFragment.java

(5)在 res/layout 下建立 fragment UI 佈局檔案(可先將其檢視設為 LinearLayout),如:fragment_learn.xml

(6)之後進行相關模型類的建立,並編寫其相關的構造方法和set、get方法

(7)之後進入 fragment 類中,在其 onCreate 方法中完成快取的讀取和相關模型類的例項化,在其 onCreateView 中,通過 inflater.inflate 方法來獲取 fragment 檢視,程式碼如下:

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_learn, container, false);
        mSubmit = (Button) view.findViewById(R.id.article_submit);
        return view;
    }
    在 inflate 方法中,第一個引數為 該 fragment 檢視佈局的資源ID,第二個引數是該檢視的父檢視,我們通常需要父檢視來正確配置元件,第三個引數告訴佈局生成器是否將生成的檢視新增給父檢視,false 即為通過程式碼的方式新增試圖。fragment 中的 onCreateView 方法相當於 activity 中的 onCreate 方法,在這個方法中應完成相關元件的獲取和設定監聽工作,唯一的區別是 fragment 中應呼叫 view.findViewById 的方法來獲取元件,而在 activity 中只需呼叫 findViewById 即可,即 activity 中的方法會在後臺自動呼叫 view.findViewById ,而在 fragment 中只能通過手動呼叫。

(8)在託管該 fragment 的 activity 中的 onCreate 方法中獲取 FragmentManager,為解決相容問題使用 getsupportFragmentManager 來進行獲取

FragmentManager fragmentManager = getSupportFragmentManager();

(9)再 fragment 的獲取,如果 fragment 佇列中有我們所需要的 fragment 即返回,否則進行初始化建立,注意需要獲取特定的 fragment 只需提供其試圖容器檢視即可。

Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);

if (fragment == null){
     fragment = new LearnFragment();
     fragmentManager.beginTransaction().add(R.id.fragment_container, fragment).commit();
}

beginTransaction 方法建立並返回 FragmentTransaction 例項,之後呼叫 add 方法將新建立的 fragment 事務加入佇列中,add 方法的第一個引數是容器檢視資源ID第二個引數為新建立的 fragment