Fragment 搭建项目
标题我还真不知道怎么取,额.....大概的意思就是用一个或几个Acitivity为基础,然后已Fragment为主体的来构建项目,然后为了方便,就记录一下如何搭建使用的框架。
技术差差的,就写个大概记录一下方式。目前的开发中,应该大多数都使用Fragment 为主体来构建项目了吧。废话不多说了,撸代码吧...
首先说 Fragment 的创建,分为静态和动态。然后我这里就是用的动态创建。项目的开始,肯定有个 MainAcitivity 的,然后它的布局是这样,另外说一下,此处我将布局名称改为了 default_fragment_layout :
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="true"
android:fitsSystemWindows="true" >
</FrameLayout>
不用别的,一个父控件,然后设置焦点拦截,添加一个 Id,就没了。
然后在 MainAcitivity 里面将原有的布局初始方法改掉成这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int layout = ResourceUtil.getLayoutId(getApplicationContext(), "default_fragment_layout");
setContentView(layout);
BaseFragment.add(this, new MainFragment(), false);
}
我们直接通过一个资源 id 来获取布局文件。然后设置布局。废话不多说的,继续接着看 ResourceUtil.getLayoutId的方法,这里面没啥,就是通过项目包路径,获取一个叫:default_fragment_layout 名字的资源文件布局:
同理,之后为了通过动态添加 fragment 布局与控件上,这里一样写一个获取控件 id 的方法先
public static int getLayoutId(Context context, String name)
{
return context.getResources().getIdentifier(name, "layout", context.getPackageName());
}
public static int getId(Context context, String name)
{
return context.getResources().getIdentifier(name, "id", context.getPackageName());
}
接着上面说的,获得了 layout 布局文件后,就设置布局进Acitivity 内,因为布局内什么都没有仅一个用于添加fragment的控件,而且我们现在不需要使用Acitivity,直接进行创建Fragment 的方法。
public class BaseFragment extends Fragment {
public static void add(FragmentActivity activity, Fragment fragment, boolean addToBackStack) {
int containerViewId = ResourceUtil.getId(activity, "fragment_container");
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.add(containerViewId, fragment);
if (addToBackStack)
ft.addToBackStack(null);
ft.commit();
}
}
这里就是创建BaseFragment 然后里面一个add 方法。通过工具类获得控件(MainAcitivty 布局里面存放Frg的控件),然后通过常用的方法,创建Fragment ,第三个参数指的是:是否添加到栈里面,用于区分创建的这个界面是否需要保存的意思咯。
总体的创建就是这么点东西配置了。然后使用,再Activity 内使用上面已经有了代码,在子Fragment 内使用直接在点击事件中调用下面方法就可以了:
add(getActivity(),new MyTowFragment(),true);
基本的一个用Fragment 为架构的项目接口的快捷方式就这样了,然后还有显示、隐藏、移除、等等一些方法,还有一些需要处理的优化和调整这里就不记录了,自己根据需要写,根据需要调整吧。
上一篇: 过度架构等于谋财害命
下一篇: 多个项目公用组件库设计