Android开发学习日记
2015-10-18 16:33
441 查看
Binary XML file line #8: Must specify unique android:id, android:tag, or have a parent with an id for ... 在创建fragment后执行程序时产生的错误,翻译了一下,原来是fragment必须要起一个id,如果匿名则会产生错误。
可以通过fragment和radiogroup的组合使用来替代tabhost,
radiobutton可以通过style来统一设置样式
radiobutton的按键响应效果也可以用selector来实现
service使用前要注册,service使用前要注册,service使用前要注册
读取SD卡目录前要在manifest.xml里申请权限,读取SD卡目录前要在manifest.xml里申请权限,读取SD卡目录前要在manifest.xml里申请权限
重要的事要说三遍
2015-10-20 00:01:37
项目中使用了fragment,想要在activity中获得fragment里的组件,由于fragment是动态添加的,根据activity和fragment的生命周期来看,执行的顺序是
activity.onCreate() ==> fragment.onAttach() ==> fragment.onCreate() ==> fragment.onCreateView() ==> fragment.onActivityCreated() ==>Activity.onStart() ==>fragment.onStart() ...,所以如果在activity的onCreate中动态添加的fragment,没有执行fragment的onCreateView()中的inflate函数,findViewById是无法找到组件的。
所以要在activity的onStart函数中执行
2015-10-21 19:06:58
我们在解决了上个问题之后会发现,虽然新的fragment可以覆盖到旧的fragment上面了,但是点击旧fragment有按键的位置后,还是会有按键音提示,并且事实上旧fragment还是会响应按键的监听事件,这是为什么呢?
这是因为新产生的fragment覆盖到了旧fragment之上,当点击屏幕后,根据Android的事件分发机制
![](http://img.blog.csdn.net/20140226203028734)
Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()
所以只要让新fragment将点击的消息消费掉,就不会再传递给下面的旧fragment了,而要消费掉消息,就需要dispatchTouchEvent()返回true,就需要onTouchEvent()返回true,
而onTouchEvent()的函数内容
想要返回true,就需要将CLICKABLE设置为true,所以,只需要在xml布局文件里将该fragment设置clickable属性为true即可。
2015-11-13 20:31:24
打算在两个activity之间传递service对象,于是把service对象设置了serialize接口,结果发生如下错误:
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.selfstudy.dc.dcmusicplayer.service.MusicService)
原来不仅service对象要实现serialize接口,service内部的成员也都要实现serialize接口才可以。
FragmentTransaction的addToBackStack()函数失效,原因一般是没有和Activity使用同一的包,使用
可以通过fragment和radiogroup的组合使用来替代tabhost,
<RadioButton style="@style/weibo_tab" android:text="歌曲列表" />
radiobutton可以通过style来统一设置样式
radiobutton的按键响应效果也可以用selector来实现
service使用前要注册,service使用前要注册,service使用前要注册
读取SD卡目录前要在manifest.xml里申请权限,读取SD卡目录前要在manifest.xml里申请权限,读取SD卡目录前要在manifest.xml里申请权限
重要的事要说三遍
2015-10-20 00:01:37
项目中使用了fragment,想要在activity中获得fragment里的组件,由于fragment是动态添加的,根据activity和fragment的生命周期来看,执行的顺序是
activity.onCreate() ==> fragment.onAttach() ==> fragment.onCreate() ==> fragment.onCreateView() ==> fragment.onActivityCreated() ==>Activity.onStart() ==>fragment.onStart() ...,所以如果在activity的onCreate中动态添加的fragment,没有执行fragment的onCreateView()中的inflate函数,findViewById是无法找到组件的。
所以要在activity的onStart函数中执行
ListView lv_music = (ListView) musicListFragment.getView().findViewById(R.id.lv_music);2.删除掉旧的fragment![]()
2015-10-20 20:55:09 新建一个listview或gridview,除非在view上有子view要设置点击响应事件才重新自定义adapter, 一般情况下都可以直接使用SimpleAdpter搞定 对于 LinearLayout 当 android:orientation="vertical" 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用。 当 android:orientation="horizontal" 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用。 使用fragment的replace函数后,新的fragment会覆盖到旧的fragment上,此时如果新的fragment没有背景色,那么旧的fragment依然会显示在屏幕上,在stackoverflow上查了下,解决办法有两个 1.给新的fragment添加背景色,默认不添加背景色时,fragment是透明的 [code]
public void onClick(View v) { switch (v.getId()) { case R.id.imageButtonSettingsManageBooks: if (mPurchaseHistory == true) { ft.remove(phFragment); Log.d(TAG, "REMOVING PURCHASE HISTORY FRAG"); } else if (mAudio == true) { ft.remove(aFragment); Log.d(TAG, "REMOVING AUDIO FRAG"); } else if (mRestore == true) { ft.remove(rFragment); Log.d(TAG, "REMOVING RESTORE FRAG"); } else if (mCopyright == true) { ft.remove(cFragment); Log.d(TAG, "REMOVING COPYRIGHT FRAG"); } else if (mAbout == true) { ft.remove(abFragment); Log.d(TAG, "REMOVING ABOUT FRAG"); } ft = fragmentManager.beginTransaction();
2015-10-21 19:06:58
我们在解决了上个问题之后会发现,虽然新的fragment可以覆盖到旧的fragment上面了,但是点击旧fragment有按键的位置后,还是会有按键音提示,并且事实上旧fragment还是会响应按键的监听事件,这是为什么呢?
这是因为新产生的fragment覆盖到了旧fragment之上,当点击屏幕后,根据Android的事件分发机制
Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()
所以只要让新fragment将点击的消息消费掉,就不会再传递给下面的旧fragment了,而要消费掉消息,就需要dispatchTouchEvent()返回true,就需要onTouchEvent()返回true,
而onTouchEvent()的函数内容
public boolean onTouchEvent(MotionEvent event) { //... if (((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)) { switch (event.getAction()) { case MotionEvent.ACTION_UP: //... } return true; } return false; }
想要返回true,就需要将CLICKABLE设置为true,所以,只需要在xml布局文件里将该fragment设置clickable属性为true即可。
2015-11-13 20:31:24
打算在两个activity之间传递service对象,于是把service对象设置了serialize接口,结果发生如下错误:
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.selfstudy.dc.dcmusicplayer.service.MusicService)
原来不仅service对象要实现serialize接口,service内部的成员也都要实现serialize接口才可以。
FragmentTransaction的addToBackStack()函数失效,原因一般是没有和Activity使用同一的包,使用
import android.app.Activity;
import android.app.FragmentTransaction;
相关文章推荐
- android 布局如何支持多种不同屏幕尺寸
- android 39 共享首选项
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- ANDROID L——RecyclerView,CardView进口和使用(Demo)
- Android基础入门教程——10.2 SmsManager(短信管理器)
- Android Support v4、v7、v13 介绍
- Android--PullToRefreshListView 的简单使用
- Android系统性能优化总结
- android 38 Abdroid客户端和服务端交互
- 关于Android的asynctask-threads-limits问题:asynctask开启的线程是否有极限
- Android通知之自定义通知、响应通知上自定义按钮和更新通知的实现
- Android下拉刷新上拉加载控件,对所有View通用!
- Android-----第三方 ImageLoader 的简单配置和使用
- 使用git查阅Android M中Doze相关代码
- Android应用程序资源文件的编译和打包原理
- Android Studio使用疑难问题汇总
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Android 弹出软键盘android:windowSoftInputMode设置总结
- Android 学习笔记之Volley开源框架解析(二)
- Android greenDao的简单配置和使用