zoukankan      html  css  js  c++  java
  • Activity以singleTask模式启动,intent传值的解决办法

    转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/46557827

    因为项目中,有一个消息推送的功能,每次推送一个消息,就会开启FunctionActivity,那么为了避免重复开启它,在退后的时候,多次出现该Activity,就将该Activity的启动模式变为singleTask。

    这样在之后的多次启动该Activity,便会调用onNewIntent(Intent intent)方法。

    activity通过intent传递数据的时候,如果activity未启动,那么 在这个刚启动的activity里通过getIntent()会获取到这个intent的数据.如果要启动的activity是已经存在的,这时候通过 getInten()方法获取到的intent是已启动的activity的原始intent.换句话说intent的数据没有更新.这样在已启动的 activity里拿到的intent的数据是旧数据.如果要每次获取intent传来的新数据就需要在onNewIntent(Intent intent)方法里调用setIntent(intent)设置这个传来的最新的intent.如下所示:

    	@Override
    	protected void onNewIntent(Intent intent) {
    		super.onNewIntent(intent);
    		Log.e("tag", "onNewINtent执行了");
    		setIntent(intent);
    		String ringName = intent.getStringExtra("ringName");
    		Log.e("tag", ringName+"传过来的值");
    		if (ringName != null) {
    			pager.setCurrentItem(1);
    		}
    	}




    当然,如果activity的启动模式是standard,那么每次都重新创建一个新的activity.这样intent也是最新的.就不用通过setIntent来更新这个intent.


    我这个项目中,FunctionActivity中里面是四个Fragment,这样 我从其他Activity跳转到FunctionActivity是不会实例化,通过getIntent()方法也不能获得最新的intent,为了解决 这个办法。还是在onNewIntent方法中,将更新的intent通过getIntent().putExtras(intent);共享出去,如下 所示:


    @Override
    	protected void onNewIntent(Intent intent) {
    		super.onNewIntent(intent);
    		Log.e("tag", "onNewINtent执行了");
    		setIntent(intent);
    		getIntent().putExtras(intent);
    	}




    这样在与它关联的Fragment中,就可以调用

    @Override
    	public void onResume() {
    		super.onResume();
    		// 第一次进入这个页面,下面的方法是不会执行的,因为ringName是null
    		String ringName = getActivity().getIntent().getStringExtra("ringName");
    		if (ringName != null) {
    			newSound.setText(ringName);
    			Log.e("tag", ringName + "要保存的值");
    			SharedPreferenceUtil.setString(getActivity(),
    					SharedPreferenceUtil.RINGTONE_NAME, ringName);
    		}
    	}


    注意,这里Fragment调用的时候,一定要在onResume方法中。

  • 相关阅读:
    Visual Studio 2005 Starter Kits
    怎样去做才是朋友?
    C#读写日志文本文件
    [文摘20080707]马云追加投资20亿 淘宝首定10年超沃尔玛目标
    [转]在WinForm应用程序中实现自动升级
    [转]官方Flash CS3简体中文帮助文档下载,AS3.0简体中文帮助文档下载
    [引]MySQL INNODB类型表的外键关联设置
    [转]winfrom让弹出的MessageBox在指定时间内自动销毁
    生活开心一笑 之 "我家半"与"QQ病毒"
    [English20080721]疯狂英语365句
  • 原文地址:https://www.cnblogs.com/tanlei/p/4935180.html
Copyright © 2011-2022 走看看