天天看點

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,是以不能直接上傳項目源碼。如果有疑問,歡迎讨論!

繼續閱讀