【android】activity、fragment傳值例子


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()獲取哦!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM