android學習(一) 在運行時爲 Activity 添加Fragment

  1. 如需執行添加或移除Fragment等事務,您必須使用 FragmentManager 創建 FragmentTransaction,後者將提供添加、移除、替換片段以及執行其他片段事務所需的 API。
  2. 如果您的 Activity 允許移除和替換片段,應在 Activity 的 onCreate() 方法執行期間爲 Activity 添加初始片段。
  3. 在處理片段(尤其是在運行時添加片段的情況下)時,請謹記以下重要準則:您的 Activity 佈局必須包含一個可以插入片段的容器 View。
  4. 以下佈局是上一課所示佈局的替代佈局,一次只顯示一個片段。若要替換片段,Activity 的佈局包含一個用來充當片段容器的空 FrameLayout。

res/layout/news_articles.xml:

<FrameLayout    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

添加Fragment

  1. 在您的 Activity 內,使用 Support Library API 調用 getSupportFragmentManager() 以獲取 FragmentManager。然後,調用 beginTransaction() 創建一個 FragmentTransaction,並調用 add() 添加一個片段。
  2. 您可以使用同一 FragmentTransaction 爲 Activity 執行多片段事務。做好更改準備時,您必須調用 commit()。
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

    public class MainActivity extends FragmentActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.news_articles);

            // 檢查活動是否使用佈局版本
            // the fragment_container FrameLayout
            if (findViewById(R.id.fragment_container) != null) {
                // 但是,如果我們正在從以前的狀態恢復,我們不需要做其他事請應當return;
                // 可能會有重疊的片段
                if (savedInstanceState != null) {
                    return;
                }

                // 在Activity裏創建新的Fragment
                HeadlinesFragment firstFragment = new HeadlinesFragment();

                // 如果Activity是想將Intent傳遞給Fragment,調用getExtras()作爲參數傳遞給Fragment
                firstFragment.setArguments(getIntent().getExtras());

                // 添加一個fragment給'fragment_container'的FrameLayout
                getSupportFragmentManager().beginTransaction()
                                .add(R.id.fragment_container,firstFragment).commit();
                }
            }
        }

由於該Fragment已在運行時被添加到 FrameLayout 容器(而不是利用 元素在 Activity 佈局中進行定義),所以,可以從該 Activity 中移除該Fragment,並將其替換爲其他片段。

替換Fragment

替換片段的步驟與添加片段類似,只不過調用的方法從 add() 改爲 replace()。

請謹記,當您執行替換或移除片段等片段事務時,通常最好讓用戶能夠回退並“撤消”更改。 要讓用戶回退所執行的片段事務,您必須先調用 addToBackStack(),然後再提交 FragmentTransaction。

:當您移除或替換一個片段並向返回棧添加事務時,系統會停止(而非銷燬)移除的片段。 如果用戶執行回退操作進行片段恢復,該片段將重新啓動。 如果您不向返回棧添加事務,則系統會在您移除或替換片段時將其銷燬

示例:

//創建Fragment,並給它一個參數,指定它應該顯示的文章
ArticleFragment newFragment = new ArticleFragment();
Bundle args = new Bundle();
args.putInt(ArticleFragment.ARG_POSITION, position);//ArticleFragment裏的常量ARG_POSITION
newFragment.setArguments(args);

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();

addToBackStack() 方法使用的可選字符串參數會爲事務指定一個唯一的名稱。除非您計劃使用 FragmentManager.BackStackEntry API 執行高級片段操作,否則並不需要該名稱。

addToBackStack()如果回退所有所執行的fragment保留Activity進行其他事件的處理

摘自android developer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章