Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android入門教程 fragment的使用

Android入門教程 fragment的使用

編輯:關於Android編程

一 、為什麼要用fragment

簡單來講,兩句話
- 解決局部刷新問題
- 一定程度解決屏幕適配問題

二 、什麼是fragment

fragment直譯過來是“碎片”的意思,也比較形象,在Android開發中它就是碎片。

用Fragment替換TabHost是Google推薦的方案。

fragment的優點

使用Fragment可以在一個Activity中實現不同界面的靈活切換 Fragment解決了Activity間的切換不流暢,布局切換時更輕量 Fragment可以封裝成不同的重用組件,並可以單獨管理其生命周期和UI布局 Fragment無需在AndroidManifest中注冊,可以在布局文件中直接引用

三 、fragment怎麼用

1、靜態加載fragment

如圖所示,整個視圖是Activity,藍色部分就是加載的Fragment

step1:新建類繼承Fragment
step2:新類裡重寫onCreateView方法
step3:使用LayoutInflater對象中的inflate方法綁定布局和控件
step4:在Activity對應的布局文件中通過fragment>標簽引用

FragmentA代碼

public class FragmentA extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_a, container, true);
    }
}

fragment_a.xml代碼




    

activity_main.xml代碼



    
    


2、動態加載fragment

step1:新建類繼承Fragment
step2:新類裡重寫onCreateView方法
step3:使用LayoutInflater對象中的inflate方法綁定布局和控件
step4:在Activity中使用FragmentTransaction動態加載Fragment

注意:
1.動態加載fragment,在activity對應的布局文件中就不能用fragment>標簽了,得用FrameLayout>標簽
2.每個Fragment中加載布局的方法,inflate方法的第三個參數必須是false

MainActivity代碼

public class MainActivity extends Activity implements OnClickListener {
    // Fragment管理器
    FragmentManager manager;
    // Fragment事務
    FragmentTransaction ft;

    FragmentA fragment_a;
    FragmentB fragment_b;
    FragmentC fragment_c;

    Button btna;
    Button btnb;
    Button btnc;

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

        bindID();

        // 初始實例化對象
        manager = getFragmentManager();
        ft = manager.beginTransaction();

        // 默認加載第一個Fragment
        if (fragment_a == null) {
            fragment_a = new FragmentA();
        }
        // 將FragmentA對象添加至事務
        ft.add(R.id.frame_content, fragment_a);
        // 提交事務
        ft.commit();

    }

    // 綁定ID並注冊點擊事件
    private void bindID() {
        btna = (Button) findViewById(R.id.btna);
        btnb = (Button) findViewById(R.id.btnb);
        btnc = (Button) findViewById(R.id.btnc);

        btna.setOnClickListener(this);
        btnb.setOnClickListener(this);
        btnc.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        //事務必須重建
        ft = manager.beginTransaction();
        // 全部隱藏,點擊誰誰顯示
        if (fragment_a != null) {
            ft.hide(fragment_a);
        }
        if (fragment_b != null) {
            ft.hide(fragment_b);
        }
        if (fragment_c != null) {
            ft.hide(fragment_c);
        }

        switch (v.getId()) {
        case R.id.btna:
            if (fragment_a == null) {
                // 若為空,添加進事務裡面
                fragment_a = new FragmentA();
                ft.add(R.id.frame_content, fragment_a);
            } else {
                // 若不為空,直接顯示
                ft.show(fragment_a);
            }
            break;

        case R.id.btnb:
            if (fragment_b == null) {
                fragment_b = new FragmentB();
                ft.add(R.id.frame_content, fragment_b);
            } else {
                ft.show(fragment_b);
            }
            break;

        case R.id.btnc:
            if (fragment_c == null) {
                fragment_c = new FragmentC();
                ft.add(R.id.frame_content, fragment_c);
            } else {
                ft.show(fragment_c);
            }
            break;

        default:
            break;
        }
        ft.commit();
    }
}

activity_main.xml布局文件代碼



    

FragmentA代碼(FragmentB/FragmentC與此類似)

public class FragmentA extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_a, container,false);//注意inflate方法的第三個參數是false
    }
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved