这段时间在看android中的一些东西,当然一切是从界面的layout开始,这些跟以前常见的如QT,GTK界面布局方式都挺接近的,就是多了一个xml的layout文件,用来将界面设计和具体功能代码decouple,还好,不难理解,写起来确实挺方便的,但后来看到了Fragment,感觉菊花紧了一下,这个东西以前没碰到过,算是一个新鲜事物,android中也是从api level 11才开始有这个的,下来就说说我对Fragment的使用方法的理解。我们以一个ToDoList的界面为例。
一个典型的ToDoList界面都有一下两个部分,用户添加新事件时用的输入框,一个展示将要处理事件的列表框,就像下面这样
像title和图标这些是自动帮你补全的,我们在这里需要处理的只是输入框和列表框而已,看一下传统方式下的layout文件,
我们可以看到,我们采用的是vertical方式LinearLayout,里面有两个小组件,EditText和ListView,从名字上可以看出,一个用来输入,一个用来列表展示。下来说说Fragment是个什么东东。
书上说,Fragment的出现,是为了使程序的界面适应众多的屏幕,这些屏幕的分辨率,尺寸等都相差巨大,比如说从小小的手机到GoogleTV(据说这个是42寸的,没见过),为了是程序能适应这么多不同尺寸的屏幕,出现了Fragment。用法就是把整个界面用Fragment组成,所有的小组件都装到各自的Fragment里面,因为Fragment的很多属性能够适应众多的屏幕尺寸,所以这样实现界面的效果就是可以支持更多尺寸的屏幕。以上面的ToDoList例子来说,就是把EditText装到一个Fragment中,把ListView装到另一个Fragment中,最后的主界面是由这两个Fragment组成,就这么简单,但程序实现起来还是有那么一些不一样的。
1. 首先创建一个layout文件,用来表示一个包含EditText的Fragment,我给他起的名字叫new_item_fragment.xml,如下
2. 你要把这个Fragment给实现了,Override函数public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) ,用来把这个Fragment和刚才定义的layout绑定起来
3. 你实现的这个Fragment需要把一些使用到的功能给封装起来,比如说添加了一个新ToDo项时的事件处理函数,OnNewItemAddedListener
4. 能够访问到主界面的Activity,毕竟你是人家肚子里的东西,总是要找到爹吧,这里需要重新实现public void onAttach(Activity activity),一完成和主Activity的绑定
5. 在这个Fragment中,把EditText的键盘输入给处理了,也就是实现myEditText.setOnKeyListener(new View.OnKeyListener(){});
6. 现在该轮到ListView了,不过好在Android中有提供ListFragment这个东西,所以不需要为这个二创建一个新的layout文件了,因为没什么别的功能,所以写个空的就可以了,如下
package com.example.todolistp2; import android.app.ListFragment; public class ToDoListFragment extends ListFragment { }
7. 让你的主界面layout只包含这两个Fragment
剩下的都是比较常规的android实现了,我把代码放在了这里,ToDoListP2,很小的代码,其实根本看不出是否有使用Fragment的区别,我这里也只是看看究竟怎么使用Fragment而已, 说一句酸酸的话,与君共勉吧。