您的位置:首页 > 移动开发 > Android开发

【Android】2015.09.07 第一行代码 Day5 Count:7

2015-09-07 22:18 567 查看
-----------------------------------------------
第一行代码
Day5
第四章
Fragment
-----------------------------------------------
Questions:
1. android:scaleType=fitXY"
这到底有什么用?不是已经match_parent的么?


2. ImageView 都不用ID?

Points:
1. fragment的生命周期中比Activity中多出的有:
onAttach()
当碎片与其关联的活动建立关联时调用
onCreateView()
加载碎片关联的视图
onActivityCreated()
当确保碎片与关联的活动视图一定一起创建完毕时调用
onDestroyView()
当碎片与其关联的视图被移除时调用(完全不可见时)
onDetach()
当碎片与其关联的活动接触关联调用

2. 当使用addToBackStack()时,系统会把视图保存在栈里,所以替换掉碎片时,只执行到了onDestroyView(), 注意,这里视图没有被销毁,只是保存在栈里,下次重新调用时,就执行onActivityCreated(),而不是onCreateView()。
如果不使用addToBackStack(),就会执行到onDetach(),执行到这里,说明碎片没有存入栈里,之前通过onCreateView()加载好的视图被销毁了,下次出现就要重新绘制加载。所以说onCreateView()这玩意儿就是用画笔绘图,对吧。

3. layout-sw600dp 最小宽度限制符

4. 当orientation是vertical的时候,weight分的就是垂直剩下的空白区域,此时允许实质height=0dp, 如果这里不小心设成height=0dp,是会看不见的视图的,也不会报错。

5.Fragment Activity之间的通信
Fragment —> Activity : getActivity()
Activity —> Fragment :
getFragmentManager().findFragmentById() //只有在activity_layout中注册了ID才能找到
Fragment1 — > Fragment2 : getActivity().getFragmentManager().findFragmentById()

6.可以看见在NewsApplication中,直接看作者的代码是不能很好的体现思维过程的,实际设计中,可以这么想:

News.class 创建新闻实体类 包含title content
考虑左边碎片:news_title_frag.xml (里面的控件id是为了后面对应类中调用,做更新处理)—>NewsTitleFragment.class —>news_title.xml
(只有加到这里,fragmengt作为Activity里面的一部分,才有了控件Id,所以本质上fragment也是控件,因为只是在activity中的一个部分,值得注意的是,我们把写好的fragment类放入mainActivity的布局文件中,一是把fragment放到对应Activity中,而是在mainAcitivty中我们可以为fragment注册id,这样我们就能findFragmentById(), 从而得到Fragment对象,调用其对应方法)
考虑右边碎片:new_content_frag.xml —>NewsContentFragment.calss —>
news_content.xml
碎片建好了,考虑整体:activity_main.xml(这里就是)
左边titles是一个列表,news_item.xml ->NewsAdapter
考虑单页,加上NewsContentActivity.class —> 判断跳转逻辑加在NewsTitleFragment.class
里面

所以Fragment总的来说就是一个特殊的构件,但是注意,Fragment的继承关系:Object



我的理解就是设计出Fragment其实就是为了: 解决不同屏幕分辩率的动态和灵活UI设计
找到一篇介绍的:/article/4963182.html

7. 观察了下android 错误输出信息,其实下面这样的结构
09-07 17:01:15.356 18014-18014/? W/ResourceType﹕ Failure getting entry for 0x7f040002 (t=3 e=2) in package 0 (error -75)
09-07 17:01:15.356 18014-18014/? W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41db1498)
09-07 17:01:15.366 18014-18014/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.smile.newsapplication/com.smile.newsapplication.NewsContentActivity}:
android.view.InflateException: Binary XML file line #7: Error inflating class fragment

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2080)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2105)
at android.app.ActivityThread.access$600(ActivityThread.java:136)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4875)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:804)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:571)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment

at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:774)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:816)
at android.view.LayoutInflater.inflate(LayoutInflater.java:559)
at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
at android.view.LayoutInflater.inflate(LayoutInflater.java:417)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:327)
at android.app.Activity.setContentView(Activity.java:1940)
at com.smile.newsapplication.NewsContentActivity.onCreate(NewsContentActivity.java:35)
at android.app.Activity.performCreate(Activity.java:5082)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2044)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2105)
at android.app.ActivityThread.access$600(ActivityThread.java:136)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4875)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:804)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:571)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f040002
at android.content.res.Resources.getValue(Resources.java:1033)
at android.content.res.MiuiResources.getValue(MiuiResources.java:87)
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2130)
at android.content.res.Resources.getLayout(Resources.java:872)
at android.view.LayoutInflater.inflate(LayoutInflater.java:464)
at com.smile.newsapplication.NewsContentFragment.onCreateView(NewsContentFragment.java:21)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:807)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1013)
at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1112)
at android.app.Activity.onCreateView(Activity.java:4738)

at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:816)
at android.view.LayoutInflater.inflate(LayoutInflater.java:559)
at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
at android.view.LayoutInflater.inflate(LayoutInflater.java:417)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:327)
at android.app.Activity.setContentView(Activity.java:1940)
at com.smile.newsapplication.NewsContentActivity.onCreate(NewsContentActivity.java:35)
at android.app.Activity.performCreate(Activity.java:5082)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2044)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2105)
at android.app.ActivityThread.access$600(ActivityThread.java:136)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4875)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:804)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:571)
at dalvik.system.NativeStart.main(Native Method)

-----------------------------------------------
第一行代码

Day5
第五章
Broadcast
-----------------------------------------------
Question:
1.wifi 3G切换问题

发现关闭wifi后,有一段没网期,然后才连上3G.
09-07 18:11:15.164 10905-10905/com.smile.broadcasttest D/MainActivity﹕ Network is good: CONNECTED
09-07 18:11:34.554 10905-10905/com.smile.broadcasttest D/MainActivity﹕ Network is bad: null

09-07 18:11:38.689 10905-10905/com.smile.broadcasttest D/MainActivity﹕ Network is good: CONNECTED
但是关闭3G,连上wifi却没有断网的过程,而且出现了三次广播:!! 为什么?

09-07 18:12:58.104 10905-10905/com.smile.broadcasttest D/MainActivity﹕ Network is good: CONNECTED
09-07 18:13:01.547 10905-10905/com.smile.broadcasttest D/MainActivity﹕ Network is good: CONNECTED

09-07 18:13:01.617 10905-10905/com.smile.broadcasttest D/MainActivity﹕ Network is good: CONNECTED

2.

1⃣️<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

2⃣️<uses-permission android:name="ANDROID.PERMISSION.RECEIVE_BOOT_COMPLETED"/>
这两个区别在哪儿,话说第二个不行

Points:
1. 如果不unregisterReceiver() 会报错

2. 限制
不要在onReceive()方法中添加过多的逻辑或者进行任何的耗时操作,因为在广播接收
器中是不允许开启线程的,当onReceive()方法运行了较长时间而没有结束时,程序就会报错。 因此广播接收器更多的是扮演一种打开程序其他组件的角色,比如创建一条状态栏通知,或 者启动一个服务等

2. 广播通知的速度貌似有点慢啊
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: