1:Activity篇
1.1向Activity傳值
關鍵點在於putExtra。如果傳遞類的話,記得類實現Serializable接口
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("param1", "data1"); intent.putExtra("param2", "data2"); startActivity(intent);
如果參數比較固定的話,我們可以考慮把傳遞參數寫成一個靜態方法,比如查看用戶詳情,參數固定就是用戶實體。可以這樣寫
private static final String PARAM_CONTACT_ENTITY = "zhexian.app.smartcall.contact.PARAM_CONTACT_ENTITY"; public static void actionStart(Context context, ContactEntity entity) { Intent intent = new Intent(context, ContactDetailActivity.class); intent.putExtra(PARAM_CONTACT_ENTITY, entity); context.startActivity(intent); }
1.2 Activity獲取參數
在SecondActivity,我們可以通過下面的代碼,獲取我們傳遞的用戶實體參數。
getIntent().getSerializableExtra(PARAM_CONTACT_ENTITY);
2:Fragment篇
將Fragment添加到Activity上,目前常用的的有兩種方式
1:直接把fragment標簽寫在布局xml上,通過name屬性,來指定對應的fragment類。
2:使用FragmentManager動態替換fragment。
第一種方式比較少見,沒法在fragment初始化時傳遞參數。但是我們可以傳遞給其托管的activity(參考1.1),然后fragment通過getActivity獲取賦值好的參數。
第二種方式是比較常見的,也是我們接下來要說的。
2.1:向Fragment傳值
這個代碼就很簡單了,我們通過IDE新建一個fragment的時候,如果勾選了創建靜態工廠方法的話,ide會自動幫我們創建好模板,里面就包含了如何向該fragment傳值。
比如我們新建了一個叫UserDetailFragment,其靜態方法如下
//參數名
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
//參數值
private String mParam1;
private String mParam2;
public static UserDetailFragment newInstance(String param1, String param2) {
UserDetailFragment fragment = new UserDetailFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
2.2:Fragment獲取參數
在onCreate方法里面,如下:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } }
tips:如果是類、枚舉的話,通過getArguments().getSerializable()獲取哦!
