今天下午糾結了一天,如何把參數傳遞到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,是以不能直接上傳項目源碼。如果有疑問,歡迎讨論!