`

android activity与viewpager+fragment的生命周期问题

 
阅读更多

有一个Activity里面是ViewPager,ViewPager里面放了两个Fragment。

第一次进入这个Activity。开启了服务,并在onResume方法中绑定服务后,对Service进行了一定的初始化,其中调用了Fragment中的一个属性。

		super.onResume();
		bindService(intent, conn, BIND_AUTO_CREATE);

		isSee = true;

		if (currentItem != null) {
			songName.setText(currentItem.getName());
		}
		if (isPlay) {
			iv.setImageResource(R.drawable.pause);
		}

		if (isPlay) {
			new Thread() {
				public void run() {
					while (binder == null) {
						try {
							Thread.sleep(1);
						} catch (InterruptedException e) {
						}
					}
					new ProgressThread().start();
fragment.initEqualizer();// 可能报空指针,其中fragment不为null。此方法里面就是一句话:
// mEqualizer = new Equalizer(0,((MusicActivity)getActivity()).binder.getAudioSessionId());
					fragment.mVisualizer.setEnabled(true);
					binder.setHandler(handler);
					handler		.sendEmptyMessage(MusicActivity.INIT_LRC);

				}
			}.start();
		}
	

 

第一次进入这个Activity很正常,返回后再进入就报空指针。

找了很久也不知道谁是null,后来发现只可能是getActivity(),可是第一次很正常,第二次才出错。

 

解决办法:

activity的生命周期执行完onResume之后,Fragment才开始被初始化。所以在线程中对fragment操作的时候,Fragment压根没和Activity绑定。

至于为什么第一次正常,没找到原因。

所以把要对binder设置的属性,放到fragment的onResume里面。

@Override
	public void onResume() {
		super.onResume();
		if (MusicActivity.isPlay) {
			new Thread() {
				public void run() {
					while (((MusicActivity) getActivity()).binder == null) {
						try {
							Thread.sleep(1);
						} catch (InterruptedException e) {
						}
					}
					setMax(((MusicActivity) getActivity()).binder.getLength());
					((MusicActivity) getActivity()).pb
							.setMax(((MusicActivity) getActivity()).binder
									.getLength());
					setProgress(((MusicActivity) getActivity()).binder
							.getCurrent());
					((MusicActivity) getActivity()).pb
							.setProgress(((MusicActivity) getActivity()).binder
									.getCurrent());
					initEqualizer();
					mVisualizer.setEnabled(true);
					((MusicActivity) getActivity()).binder.setHandler(handler);
					((MusicActivity) getActivity()).handler
							.sendEmptyMessage(MusicActivity.INIT_LRC);
				}
			}.start();
		}
	}

 就没null了。

分享到:
评论

相关推荐

    Android 多层嵌套后的 Fragment 懒加载实现示例

    但是之前的应用可能最多的是一层 Activity + ViewPager 的 UI 层次,但是随着页面越来越复杂,越来越多的应用首页一个页面外层是一个 ViewPager 内部可能还嵌套着一层 ViewPager,这是之前的懒加载就可能不那么好用...

    Android App中使用ViewPager+Fragment实现滑动切换效果

    在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,...另外一个概念就是Fragment和FragmentActivity,Fragment是一个特殊的类,有着和activity一致的生命周期和view一致的界面,也就是

    Fragment中嵌套(Fragment+ViewPager)完整Demo

    该Demo为Fragment中嵌套(Fragment+ViewPager),在实际的项目中要注意Activity和Fragment的生命周期,以及它们随时可能被销毁的情况。

    Activity和Fragment生命周期综合测试

    该DEMO是为了测试activity和fragment的生命周期,以及在viewpager切换过程中,fragment是否会被销毁。

    Android从Fragment跳转到其他Activity的简单实例

    为了实现从Fragment跳转到其他Activity,下面需要创建以下文件: 第一步:简单编写布局文件fragment_activity.xml和抽象类TemplateFragmentActivity.java代码如下: fragment_activity.xml <?xml version=1.0 ...

    android viewpager 实现底部导航

    实现android 底部导航的方式有好几种如:fragment:、TabActivity、ViewGroup、...是重量级的组件,fragment是android里面的片段,是特殊的view,他具备生命周期。 4、ViewGroup : a :属于低级组件。比较麻烦。

    一个Android项目级快速开发框架

    1、基于Retrofit2.x及RxJava2.x的网络请求封装、网络请求与生命周期绑定、快速观察者、快速loading观察者、快速返回常用错误 2、 常用功能库二次封装方便调用:Glide加载图片封装、TabLayout+ViewPager Fragment切换...

    Android知识点及重要代码合集 word文档

    12.2 fragment生命周期演示 150 12.3ScrollView布局文件 156 12.4 Fragment代码 157 12.5 Activity传值到Fragment 159 12.6 Fragment传值到Activity 162 12.7 Fragment传值到Fragment 164 12.8万能的接口回调 165 ...

    Android代码-FastLib

    基于Retrofit2.x及RxJava2.x的网络请求封装、网络请求与生命周期绑定、快速观察者、快速loading观察者、快速返回常用错误 常用功能库二次封装方便调用:Glide加载图片封装、TabLayout ViewPager Fragment切换封装、...

    Android代码-外包项目聚合信息

    ViewPager 懒加载:在 Activity 生命周期内仅加载一次,且第一次可见时加载。 LCEE 界面逻辑:也就是加载、内容、错误、空视图。 项目包结构 com.ittianyu.pocenter common            公用代码 a

    DialogFragment

    使用DialogFragment 实现dialog效果 并且可以将ViewPager的每项使用Fragment,Fragment有自己的生命周期,而且碎片化将activity的代码分离,fragment达到复用的效果。非常好用。

    nmct-appdev-sem4:用于NMCT模块App开发的Android Studio项目

    周细目基本的Java和枚举基本的Android开发,滑块,片段,可绘制资源Activity和Fragment生命周期,共享首选项,风俗View , Bundle 显式Intent , Intent.putExtra , startActivityForResult ,意图过滤器,隐式...

    Java弱引用实现源码-DataStructure::kiss_mark::kiss_mark:数据结构、算法总结、学习算法的时间复杂度、空间复杂度、分析算法特点以及应用、Java面

    [Activity和Fragment和Service生命周期] [Handler机制] ViewPager缓存原理 设计模式 [迭代器模式]基本用不到 [备忘模式]很简单、就是有个管理员保存一些对象 [访问者模式] 不常用,不好用,不信你擦擦 [解释器模式] ...

Global site tag (gtag.js) - Google Analytics