編輯:關於Android編程
簡單來講,兩句話
- 解決局部刷新問題
- 一定程度解決屏幕適配問題
fragment直譯過來是“碎片”的意思,也比較形象,在Android開發中它就是碎片。
用Fragment替換TabHost是Google推薦的方案。
fragment的優點
使用Fragment可以在一個Activity中實現不同界面的靈活切換 Fragment解決了Activity間的切換不流暢,布局切換時更輕量 Fragment可以封裝成不同的重用組件,並可以單獨管理其生命周期和UI布局 Fragment無需在AndroidManifest中注冊,可以在布局文件中直接引用如圖所示,整個視圖是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代碼
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 } }
一、前言Android應用開發中多線程編程應用比較廣泛,而應用比較多的是ThreadPoolExecutor,AsyncTask,IntentService,Handle
在項目開發中,帶刪除按鈕輸入框也是人們常常用到的,該文章便介紹一下如何創建一個帶刪除輸入框。其中,需要解決的問題如下:a)創建自定義editText類b)在自定義edit
Android的內存優化是性能優化中很重要的一部分,而避免OOM又是內存優化中比較核心的一點,這是一篇關於內存優化中如何避免OOM的總結性概要文章,內容大多都是和OOM有
今天在修改一個布局問題時候,發現自己對權重的理解還不夠。首先問題如圖:一個TextView沒有按要求顯示完整,顯示成了2行。怎麼辦呢?方法1:是把它左面的字體放小。結果師