Activity传递参数到Fragment

今天下午纠结了一天,如何把参数传递到Fragment,其实网上很多资料,

getActivity().getIntent().getStringExtra(getString(R.string.bloger));

大多是上面的方法。由于我的实际情况比较特殊,导致不能直接用上面的方法。

我的Fragment attach的Activity的启动方式为singleTask,也就是说,从其他activity跳转到该activity是不会重新实例化,通过getIntent()方法也不能获取到传递过来的参数。但是,可以通过

protected void onNewIntent(Intent intent)

方法中的intent对象获取到参数。但是这个intent对象不能直接传递给Fragment,最后想到的办法是,把该intent对象共享给getIntent(),如此一来,就可以直接在Fragment中调用getActivity().getIntent()获取参数了。

Activity中的方法如下:

<span style="white-space:pre">	</span>//当启动模式为singletask,重新被启动时调用
	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		int initPosition = intent.getIntExtra(getString(R.string.init_position), Constants.DEF_BLOG_TYPE.BLOGERBLOG);
		Log.i(TAG, "onNewIntent initPosition=" + initPosition);
		indicator.setCurrentItem(initPosition);

		getIntent().putExtras(intent);
	}

在Fragment中获取参数的方法如下:

	@Override
	public void onResume() {
	    super.onResume();
	    Log.i(TAG, "onResume");

	    Activity activity = getActivity();
		if (activity != null) {
			String bloger = activity.getIntent().getStringExtra(getString(R.string.bloger));
			if (!TextUtils.isEmpty(bloger) && bloger.equals(CSDNApplication.getInstance().getCurrentBlogerID())) {
				blogListView.startRefresh(); // 开始刷新
			}
		}

	    MobclickAgent.onPageStart("BlogerBlogFrag"); //统计页面
	}

直接贴的项目中的代码,没有专门写demo,所以不能直接上传项目源码。如果有疑问,欢迎讨论!

时间: 2024-08-25 04:31:38

Activity传递参数到Fragment的相关文章

使用Intent向Activity传递参数

在前面 向应用添加一个新的Activity 里,我们使用 intent 从一个 Activity 跳转到另一个 Activity.其实 intent 在跳转的同时,还可以向目标 Activity 传递参数,这里我们还是以实际例子来说明怎么操作.云鼎娱乐城 MainActivity : 01 private Button button; 02   03 @Override 04 protected void onCreate(Bundle savedInstanceState) { 05     

Activity传递参数——传递自定义数据类型

一.新建一个空的工程 二.在主界面中添加一个按钮 三.新建一个空的activity,并命名为TheAty 四.新建一个user类 //注意这里要实现Serializable,不然在传递参数时会出错 public class User implements Serializable{ private String name; private int age; public String getName() { return name; } public void setName(String na

Activity传递参数

1.activity之间可以通过intent传递参数.具体方式如下首先声明Intent intent = new Intetn(); 然后通过 意图跳转到另一个activity 之后需要用到方法 intent.putExtra(键,值);此方法和map集合一样是通过键值对 来存储数据 startActivity(intent); 另外一个 activity 在oncreat()方法首先要获得intent Bundle bundle = getIntent().getExtras(); Strin

Activity传递参数——传递复杂数据(Bunble包)

一.新建一个空的工程 二.在主界面中添加一个按钮 三.新建一个空的activity,并命名为TheAty 四.修改MainActivity.java中的onCreate函数 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btnStartAty).set

启动activity传递参数的另外一种工具类

public class IntentUtil { public static void start_activity(Activity activity,Class<?> cls,<span style="color:#ff6666;">BasicNameValuePair</span>...name) { Intent intent=new Intent(); intent.setClass(activity,cls); for(int i=0;

Fragment+Activity传递数据

自己经常使用的知识点,每次到要用的时候都还要再查一次才能懂得使用,终于体会到总结的必要性了. Activity传递数据给Fragment Bundle bundle_fragment=new Bundle (); String selecter=ClassList.get (position); bundle_fragment.putString (ClassTag, selecter); StudentFragment studentFragment = new StudentFragment

Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数(转)

Fragment在Android3.0开始提供,并且在兼容包中也提供了Fragment特性的支持.Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自定义Fragment时,为什么官方推荐Fragment.setArguments(Bundle bundle)这种方式来传递参数,而不推荐通过构造方法直接来传递参数呢?为了弄清这个问题,我们可以做一个测试,分别测试下这两种方式的不同 首先,我们来测试下通过构造方法传递参数的情况 public class FramentT

Fragment 回退栈 传递参数,点击切换图片使用Fragment ListView

Fragment回退栈  类似与Android系统为Activity维护一个任务栈,我们也可以通过Activity维护一个回退栈来保存每次Fragment事务发生的变化. 如果你将Fragment任务添加到回退栈,当用户点击后退按钮时,将看到上一次的保存的Fragment. 一旦Fragment完全从后退栈中弹出,用户再次点击后退键,则退出当前Activity.   transaction.add(R.id.right, rightFragment); transaction.addToBack

Android开发之Fragment传递参数的几种方法

Fragment在Android3.0开始提供,并且在兼容包中也提供了Fragment特性的支持.Fragment的推出让我们编写和管理用户界面更快捷更方便了. 但当我们实例化自定义Fragment时,为什么官方推荐Fragment.setArguments(Bundle bundle)这种方式来传递参数,而不推荐通过构造方法直接来传递参数呢?为了弄清这个问题,我们可以做一个测试,分别测试下这两种方式的不同 首先,我们来测试下通过构造方法传递参数的情况 public class FramentT