我有以下簡單代碼在內容框架中從一個片段切換到另一個片段。有一種簡單的方法可以在下面的代碼中傳遞變量嗎?如何通過Android fragmentmanager傳遞變量
FragmentManager fm = getActivity().getFragmentManager();
fm.beginTransaction().replace(R.id.content_frame, new TransactionDetailsFragment()).commit();
我有以下簡單代碼在內容框架中從一個片段切換到另一個片段。有一種簡單的方法可以在下面的代碼中傳遞變量嗎?如何通過Android fragmentmanager傳遞變量
FragmentManager fm = getActivity().getFragmentManager();
fm.beginTransaction().replace(R.id.content_frame, new TransactionDetailsFragment()).commit();
您可以使用捆綁:
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);
}
}
}
如何創建TransactionDetailsFragment
的參數化構造函數?
fm.beginTransaction().replace(R.id.content_frame, new TransactionDetailsFragment(YOUR_PARAMS)).commit();
當您創建new TransactionDetailsFragment(YOUR_PARAMS)
作爲FragmentTransaction
設置了一個param,我想使用的構造是一個不錯的選擇。
使用這個,但它有一個問題 - 沒有noarg構造函數,這個片段不能在xml佈局中使用。 – Pavlus
或者你可以使用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");
不知道爲什麼這被標記爲這個問題清楚地說明了fragmentmanager,所引用的答案只涉及一個新的片段類,這對於一個java newb來說是一個差異。然而,接受的答案似乎已經正確承認了這一點。 –