天天看点

碎片感悟,折磨人的PlaceholderFragment,折磨人的fragment_main

一直没有看相关的书籍,网上的文章,一直都在摸索碎片和Activity之间的联系,通过百度,google,csdn,cnblogs各种地方的学习

总结出一些东西

1.也是纠结我半天时间的东西Fragment里的findViewById

PS:刚学android,已经4.4了,后悔4.1的时候没有和宝德请教,那时候想涉足Object-C,但由于种种原因而搁置

4.x和之前的差异好大 ADT 22.6.x和之前的ADT差异也好大

当然一路追随ADT过来的人都知道每一步的改动基于什么原理。。。。。。。而我就属于盲人摸象了

闲话不扯,开始总结纠结我最长时间的findViewById

之前 没有碎片机制,所以直接findVIewById就可以了

而3.0之后引入了碎片机制,ADT 22.6.x新建Android工程MainAcitivity自带一个PlaceholderFragment类以及layout里自带一个fragment_main.xml布局文件

这些东西刚入门的我是完全不懂的,视频一开始看的是Mars老师的4.2的重制版 ADT没升级到22.6 也没有这些东西(虽然内置了碎片,但是新工程不会继承,也不会生成布局文件)

而根据源码分析,以及网上找各种22.6.x新建工程继承Activity而不是ActionBarActivity

PS:这里又要补充一点向下兼容的小内容

如果新建工程的最低版本低于4.0,那么工程会生成一个appcompat_v7,里面存放一个很重要的R.java,4.0版本更新后R的创建不同于早期版本,这是兼容模式生成的低版本R,也就是存储一些Resources的id

如果程序没有语法错误,而出现一些R类的Error提示,那么需要Project---Clean一下,应该是重置R里的ID,因为都是静态的Integer;

接着上面,继承Activity之后,那么又需要删除Fragment相关的所有内容(MainActivity里的);

之后就和之前版本的ADT开发步骤完全一样了。

但是我不想这样,继续摸索,碎片机制的引入当然为了更好的支持Pad设备,肯定有很大的作用,要不ADT22.6也不会无缘无故新工程创建一个碎片Main。

终于让我找到了方法 在碎片中复写OnCreateView中findViewById需要用View对象调用该方法,示例:

View root = inflater.inflate(R.layout.fragment_main, container,false);
			insertBtn = (Button)root.findViewById(R.id.insert);
           

而且碎片内所有的操作一定要在return这个View对象之前。因为碎片的OnCreateView是有返回值的,其他生命周期和Activity类似,还需要注意一点,碎片没有OnReStart;想要深入了解Activity和Fragment的区别,一定要掌握他们生命周期的区别。别看我写这么一大堆,其实我也不大懂!

2.Activity.this语法不通.(也可以理解为不同,但是我觉得因为默认碎片是Activity的内部类.所以直接Mainactivity.this会报错)

在MainActivity中的意图对象Intent中

MainActivity.this的失效使之前版本的操作失去作用,所以Google在Fragment里内置了一个新的方法 getActivity();  这个相当重要,如果想用碎片的话

源码说明文档这样写:Return the Activity this fragment is currently associated with.

示例说明:

Intent intent = new Intent();
intent.setClass(getActivity(),OtherActivity.class);
stratActivity(intent);
           
Uri uri = getActivity().getContentResolver().insert(UserTableMetaData.CONTENT_URI, values);

//这句需要注意,一般在Activity中,一般情况都省略掉了this,但是这里省略掉,碎片就不知道哪个Activity要getContentResolver()了
           

暂时只碰到这些问题,明后天《精通Android4》就到货了,再深入研究一下碎片的所有内容

悲催的小城市新华书店没有这本书,而且没有招Android程序员的公司!一曲一场叹,一生为一人啊。只能在代码里寻找自己快乐的源泉了

碎片感悟,折磨人的PlaceholderFragment,折磨人的fragment_main