学会使用Fragment的静态加载与动态加载
(一)fragment的概念:
Fragment是一种在Android3.0开始引入新的API技术,在Activity中将UI组件进行分组和模块化管理,而分组后的UI组件就是Fragment。
(二)为什么使用Fragment
一个Activity页面中可以包含多个Fragment模块,而同一个Fragment模块也可以被多个Activity使用。就可以解决局部布局问题。
总结优点:
- 实现界面的灵活切换;
- 布局切换更加流畅;
- 可以封装成不同的重要组件,进行单独管理生命周期和UI布局;
- 无须在AndroidManifest中注册,在布局文件中直接引用;
(三)Fragment的静态加载
步骤:
- 新建一个空的Activity;
- 在Activity布局文件中进行行布局,可以写入一个TextView控件;
- 新建Fragment类,导入SDK中的Fragment包(不用使用V4包中的Fragment);
返回ctivity布局文件写入fragment,注意一定要写它的name和id。
图片展示:
代码展示:
<fragment
android:id="@+id/fa"
android:name="com.lenovo.dandan.fragmentprojects.fragment.BlankFragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
</fragment>
(四)Fragment的动态加载
步骤:
- 建立新的活动Activity;
- 新建两个Fragment;
- 在Activity布局文件中添加两个按钮,用FragmentLayout布置碎片活动;
- 在Activity.javaz中定义两个Feagment页面,绑定Button的ID,为Button添加监听;
- 最后设置点击事件。
图片展示:
代码展示:
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"></FrameLayout>
public void onClick(View view) {
FragmentManager manager=getFragmentManager();
FragmentTransaction fragmentTransaction=manager.beginTransaction();
switch (view.getId()) {
case R.id.xs_btn1:
if(fragmentA==null){
fragmentA=new FragmentA();
}
fragmentTransaction.replace(R.id.content,fragmentA);
break;
case R.id.xs_btn2:
if(fragmentB==null){
fragmentB=new FragmentB();
}
fragmentTransaction.replace(R.id.content,fragmentB);
break;
default:
break;
}
fragmentTransaction.commit();
}
(五)Fragment与Adapter结合
图片预览:
- 创建Adapter
public class MyAdapter extends FragmentPagerAdapter {
private List<Fragment> mfragmentList;
public MyAdapter(FragmentManager fm, List<Fragment>fragmentList) {
super(fm);
this.mfragmentList=fragmentList;
}
@Override
public Fragment getItem(int position) {
return mfragmentList.get(position);
}
@Override
public int getCount() {
return mfragmentList.size();
}
}
创建三个Fragment
创建适配器并绑定
//创建适配器
MyAdapter adapter = new MyAdapter(getSupportFragmentManager(), fragmentList);
//绑定
viewPager.setAdapter(adapter);
- 页面滑动切换
public void onClick(View view) {
switch (view.getId()) {
case R.id.news_btn:
viewPager.setCurrentItem(0);
break;
case R.id.friend_btn:
viewPager.setCurrentItem(1);
break;
case R.id.contact_btn:
viewPager.setCurrentItem(2);
break;
default:
break;
}
}