編輯:關於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多線程編程之線程池學習篇(一)
一、前言Android應用開發中多線程編程應用比較廣泛,而應用比較多的是ThreadPoolExecutor,AsyncTask,IntentService,Handle
[Android]自定義帶刪除輸入框
在項目開發中,帶刪除按鈕輸入框也是人們常常用到的,該文章便介紹一下如何創建一個帶刪除輸入框。其中,需要解決的問題如下:a)創建自定義editText類b)在自定義edit
Android內存優化之OOM
Android的內存優化是性能優化中很重要的一部分,而避免OOM又是內存優化中比較核心的一點,這是一篇關於內存優化中如何避免OOM的總結性概要文章,內容大多都是和OOM有
Android實習收獲:UI細節bug引發的layout_weight深入理解
今天在修改一個布局問題時候,發現自己對權重的理解還不夠。首先問題如圖:一個TextView沒有按要求顯示完整,顯示成了2行。怎麼辦呢?方法1:是把它左面的字體放小。結果師