2016-03-02 139 views
1

我有以下簡單代碼在內容框架中從一個片段切換到另一個片段。有一種簡單的方法可以在下面的代碼中傳遞變量嗎?如何通過Android fragmentmanager傳遞變量

FragmentManager fm = getActivity().getFragmentManager(); 

fm.beginTransaction().replace(R.id.content_frame, new TransactionDetailsFragment()).commit(); 
+1

不知道爲什麼這被標記爲這個問題清楚地說明了fragmentmanager,所引用的答案只涉及一個新的片段類,這對於一個java newb來說是一個差異。然而,接受的答案似乎已經正確承認了這一點。 –

回答

4

您可以使用捆綁:

FragmentManager fm = getActivity().getFragmentManager(); 
Bundle arguments = new Bundle(); 
arguments.putInt("VALUE1", 0); 
arguments.putInt("VALUE2", 100); 

MyFragment myFragment = new Fragment(); 
fragment.setArguments(arguments); 

fm.beginTransaction().replace(R.id.content_frame, myFragment).commit(); 

然後,您檢索如下:

public class MyFragment extends Fragment { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Bundle bundle = this.getArguments(); 
     if (bundle != null) { 
      int value1 = bundle.getInt("VALUE1", -1); 
      int value2 = bundle.getInt("VALUE2", -1); 
     } 
    } 
} 
1

如何創建TransactionDetailsFragment的參數化構造函數?

fm.beginTransaction().replace(R.id.content_frame, new TransactionDetailsFragment(YOUR_PARAMS)).commit(); 

當您創建new TransactionDetailsFragment(YOUR_PARAMS)作爲FragmentTransaction設置了一個param,我想使用的構造是一個不錯的選擇。

+0

使用這個,但它有一個問題 - 沒有noarg構造函數,這個片段不能在xml佈局中使用。 – Pavlus

1

或者你可以使用newInstance方法 - 創建片段類像裏面的方法:

public static TransactionDetailsFragment newInstance(String param) { 
    TransactionDetailsFragment frag = new TransactionDetailsFragment(); 
    Bundle bund = new Bundle(); 
    bund.putString("paramkey", param); // you use key to later grab the value 
    frag.setArguments(bund); 
    return frag; 
} 

所以要創建你的片段:

TransactionDetailsFragment.newInstance("PASSING VALUE"); 

(這是用來代替你new TransactionDetailsFragment()

然後,例如,在相同的片段的onCreate/onCreateView你得到這樣的價值:

String value = getArguments().getString("paramkey");