`

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了。

分享到:
评论

相关推荐

    viewpager+fragment无限滑动+传值给fragment

    `Fragment`有自己的`onCreate()`, `onCreateView()`, `onResume()`, `onPause()`, `onDestroyView()`, `onDestroy()`等生命周期方法,它们与`Activity`的生命周期相协调。在`ViewPager`中,当`Fragment`被显示或隐藏...

    ViewPager + Fragment Demo程序

    - **Fragment的生命周期**:Fragment有自己的生命周期,包括`onCreate()`, `onCreateView()`, `onActivityCreated()`, `onStart()`, `onResume()`, `onPause()`, `onStop()`, `onDestroyView()`, `onDestroy()` 和 ...

    ViewPager+Fragment_Demo

    5. **生命周期管理**:由于Fragment嵌套在ViewPager中,它们的生命周期会受到Activity和ViewPager的影响。理解并正确处理Fragment的生命周期方法(如`onCreate()`, `onResume()`, `onPause()`等)是确保应用性能和...

    ViewPager+Fragment,NavigationTabbar,NavigationTabbar+Fragment

    `Fragment`有自己的生命周期,并且可以拥有自己的视图层次结构。它们是构建模块化应用程序的关键,因为一个Activity可以包含多个Fragment,这样可以更方便地管理和更新界面。在`ViewPager`中使用`Fragment`,每个`...

    BottomBar+ViewPager+Fragment

    4. **处理Fragment的生命周期**:由于Fragment的生命周期与Activity紧密相关,因此需要确保在适当的时候保存和恢复Fragment的状态,特别是在设备旋转等情况下。 5. **优化用户体验**:为了提供更佳的用户体验,可以...

    仿微信5.2界面(ActionBar+ViewPager+Fragment)

    最后,Fragment是Android中的一个核心组件,它是Activity的一部分,可以独立存在或者与其他Fragment组合,用于创建动态和灵活的用户界面。在仿微信的场景中,每个Fragment通常代表一个特定的功能或内容,如聊天窗口...

    ViewPager + Fragment小Demo

    `Fragment`有自己的生命周期和UI,可以独立于Activity存在。在`ViewPager`中,每个`Fragment`对应一个页面,它们可以在用户滑动时被创建和销毁,以节省内存。 在`Fragment`中,我们通常会定义一个布局文件,并在`...

    android vierpager+fragment嵌套viewpager+fragment

    3. **处理生命周期**:当`Fragment`中的`ViewPager`有自己的`Fragment`时,需要特别注意`Fragment`的生命周期。例如,当外部`ViewPager`切换页面时,内部`Fragment`可能会被销毁和重建,因此需要确保数据的保存和...

    viewpager+fragment实现仿QQ选项卡

    在Android应用开发中,"ViewPager+Fragment实现仿QQ选项卡"是一种常见的设计模式,用于创建一个界面,其中用户可以通过滑动在多个视图之间切换,每个视图通常代表不同的功能或内容区域。这个设计灵感来源于QQ应用的...

    viewPager+fragment+toolbar

    `Fragment`有自己的生命周期,并且可以与其他`Fragment`或`Activity`进行通信。在`ViewPager`和`Fragment`的结合使用中,`Fragment`可以包含复杂的视图结构,使得用户可以在滑动时体验到平滑的页面过渡。 接下来,...

    ViewPager + fragment + RecyclerView

    `Fragment`有自己的生命周期,可以与Activity交互,并处理用户输入和响应事件。在`ViewPager`中使用`Fragment`,可以为每个页面提供不同的功能和视图,使得应用具有更丰富的交互体验。 接下来,`RecyclerView`是...

    TabLayout+ViewPager+Fragment实现分页滑动效果Demo

    `Fragment`是Android应用中的一个可重用的UI组件,它可以嵌入到Activity中,有自己的生命周期和UI布局。在分页滑动的场景中,每个`Tab`通常对应一个`Fragment`,这样每个页面都有独立的数据和视图管理。 现在,让...

    ViewPager+RadioGroup+Fragment实现选项卡

    `Fragment`有自己的生命周期,可以独立于Activity进行管理,这样可以提高代码的可维护性和复用性。在`ViewPager`中使用`Fragment`,需要通过适配器的`instantiateItem()`方法实例化每个`Fragment`并添加到`ViewPager...

    Android ViewPager+Fragment超高仿微信主界面

    Fragment有自己的生命周期,并且可以与Activity交互。在创建Fragment时,需要定义布局并在`onCreateView()`方法中返回,同时处理用户交互事件。 **3. RadioGroup** RadioGroup是Android中管理RadioButton的容器,...

    android-viewpager+fragment

    在`ViewPager`与`Fragment`的结合使用中,每个`Fragment`通常有自己的生命周期和回调方法,如`onCreateView()`, `onResume()` 和 `onPause()`等,这些回调方法会根据用户在`ViewPager`中的滑动行为进行调用。...

    android Viewpager+fragment实现页面切换

    2. **创建Fragment**:`Fragment`是Android中的一个可重用的UI组件,它可以有自己的布局和生命周期。在本例中,我们需要为每个页面创建一个`Fragment`子类,每个子类负责自己的数据加载和UI呈现。 3. **设置Adapter...

    ViewPager+Fragment实现无限加载

    同时,为了防止内存泄漏,确保正确处理`Fragment`的生命周期,特别是当`Fragment`被回收时,取消网络请求或订阅。 此外,为了使无限加载更平滑,我们可以采用分页加载策略,每次只加载一部分数据,减少一次性加载...

    android ActionBarTabs+ViewPager+Fragment 实现tab滑动翻页效果

    `Support13Demos`项目可能包含了一系列不同类型的示例,涵盖了各种情况下的`ActionBarTabs+ViewPager+Fragment`实现,例如:动态添加Tab、处理Tab和Fragment的生命周期、处理配置变更等。这些例子有助于开发者了解和...

    ViewPager+Fragment动态增加,删除页面

    - 动态操作时,要处理好`Fragment`的生命周期,避免因未正确销毁导致的问题。 - 如果有数据绑定,确保在添加或删除`Fragment`时更新数据源,以保持数据和视图的一致性。 6. **Viewpagertest项目** 在名为`...

    Android源码——ViewPager+Fragment实现QQ界面.zip

    Fragment还可以有自己的生命周期方法,方便管理各自的逻辑和状态。 在实现QQ界面的过程中,首先需要创建一个包含多个Fragment的PagerAdapter子类,这是ViewPager的数据源。PagerAdapter会根据需要加载并返回对应的...

Global site tag (gtag.js) - Google Analytics