一、概述:
如果项目里有很多fragment,如果直接从各个菜单直接调用的话是不是显得很杂乱无章呢?
这时我们就得把相关有共性的fragment抽取出来,做成一个抽象类,封装好所有fragment的共有的方法
如果不是共有的方法,就做成抽象方法,由其实现的fragment去实现
二、基类BaseFragment
关于LoadingPage 页面的实现这里就不多说了,请看
http://blog.csdn.net/lovoo/article/details/51714407
/** * @描述 fragment * @项目名称 App_Shop * @包名 com.android.shop.fragment * @类名 BaseFragment * @author chenlin * @date 2014年3月28日 下午10:33:59 */
public abstract class BaseFragment<T> extends Fragment {
private LoadingPage mLoadingPage;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (mLoadingPage == null) {
mLoadingPage = new LoadingPage(getActivity()){
@Override
public View createSuccessView() {
return BaseFragment.this.createSuccessView();
}
@Override
public LoadResult loadFromServer() {
return BaseFragment.this.load();
}
};
}else {
ViewUtil.removeParent(mLoadingPage);
}
return mLoadingPage;
}
/*** * 创建成功的界面 * @return */
public abstract View createSuccessView();
/** * 从服务器得到结果吗 * @return */
protected abstract LoadResult load();
/** * 显示加载页面 */
public void show(){
if (mLoadingPage != null) {
mLoadingPage.show();
}
}
/**校验数据 */
public LoadResult checkData(List<T> datas){
if (datas == null) {
return LoadResult.error;
}else {
if (datas.size() == 0) {
return LoadResult.empty;
}else {
return LoadResult.success;
}
}
}
}
三、工厂类FragmentFactory
这里使用了SparseArray类来存取所有的fragment,在调用的时候根据frament所在的位置来读取
/** * @描述 fragment工厂 * @项目名称 App_Shop * @包名 com.android.shop.helper * @类名 FragmentFactory * @author chenlin * @date 2014年3月27日 下午9:04:13 */
@SuppressWarnings("all")
public class FragmentFactory {
private static SparseArray<BaseFragment> mFragments = new SparseArray<BaseFragment>();
public static BaseFragment createFragment(int position){
BaseFragment fragment = mFragments.get(position);
if (fragment == null) {
switch (position) {
case 0:
//主页
fragment = new HomeFragment();
break;
case 1:
//App商城
fragment = new AppFragment();
break;
case 2:
fragment = new GameFragment();
break;
//主题
case 3:
fragment = new SubjectFragment();
break;
case 4:
//种类
fragment = new CategoryFragment();
break;
case 5:
//
fragment = new TopFragment();
break;
}
if (fragment != null) {
mFragments.put(position, fragment);
}
}
return fragment;
}
}
四、工厂类的使用
1)在string.xml里定义
<string-array name="tab_names">
<item>首页</item>
<item>应用</item>
<item>游戏</item>
<item>专题</item>
<item>分类</item>
<item>排行</item>
</string-array>
2)创建activity
public class MainActivity extends BaseActivity {
private ViewPager mViewPager;
private PagerTabStrip mTabStrip;
private String[] mTabNames;
private Fragment mCurrentFragment;
private FrameLayout mMenuFragment;
@Override
public void init() {
setContentView(R.layout.activity_main);
mTabNames = Util.getStringArray(R.array.tab_names);
}
@Override
public void initViews() {
mViewPager = (ViewPager) findViewById(R.id.vp_main);
mViewPager.setAdapter(new TabPagerAdapter(getSupportFragmentManager()));
mTabStrip = (PagerTabStrip) findViewById(R.id.pager_tab_strip);
mTabStrip.setTabIndicatorColor(getResources().getColor(R.color.tabIndicator_color));
}
@Override
protected void initEvents() {
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
@Override
public void onPageSelected(int position) {
//getSupportActionBar().setSelectedNavigationItem(position);
//在页面切换时显示不同的加载页面
FragmentFactory.createFragment(position).show();
super.onPageSelected(position);
}
});
}
private class TabPagerAdapter extends FragmentStatePagerAdapter{
public TabPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
mCurrentFragment = FragmentFactory.createFragment(position);
return mCurrentFragment;
}
@Override
public int getCount() {
return mTabNames.length;
}
@Override
public CharSequence getPageTitle(int position) {
return mTabNames[position];
}
}
3、布局
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawerlayout_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/vp_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" >
<android.support.v4.view.PagerTabStrip
android:id="@+id/pager_tab_strip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:background="#d17026"
android:textColor="#fff" />
</android.support.v4.view.ViewPager>
<FrameLayout
android:id="@+id/fl_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:text="应用详情" >
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
———————————————————————
有需求者请加qq:136137465,非诚勿扰
(java 架构师全套教程,共760G, 让你从零到架构师,每月轻松拿3万)
01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
(送:hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门)
——————————————————————–