[英]How can I pass a String between fragments?
我知道已經有一些關於它的問題,但沒有一個答案適合我。
我想將字符串 inputEmail 從 StartFragment 傳遞給 SignInFragment。
我試圖用捆綁包做到這一點:
起始片段
SignInFragment fragmentTwo = new SignInFragment();
Bundle bundle = new Bundle();
bundle.putString("key", input_mail);
fragmentTwo.setArguments(bundle);
登錄片段:
View view = inflater.inflate(R.layout.fragment_sign_in, container, false);
Bundle bundle = getArguments();
if (bundle!=null) {
String mail = bundle.getString("key");
}
else {
Toast.makeText(getActivity(), "key not found", Toast.LENGTH_SHORT).show();
}
return view;
我已經發現問題是找不到密鑰,這就是應用程序一直崩潰的原因。 所以我放了一個 if 子句來修復它,但我仍然沒有得到字符串 inputEmail。
那么如何從 StartFragment SignInFragment 傳遞字符串 inputMail
提前謝謝你
當你傳遞一個參數時,它的類型也必須是String
。 相反,您傳遞一個Serializable
類型,然后嘗試檢索一個String
類型。 請按如下方式更改您的代碼:
SignInFragment fragmentTwo = new SignInFragment();
Bundle bundle = new Bundle();
bundle.putString("key", input_mail); // pass a String key, not a Serializable one
fragmentTwo.setArguments(bundle);
您可以使用您的活動傳遞您的字符串:
在StartFragment
中創建一個接口並在您的活動中實現它。
StartFragment
:
public class StartFragment extends Fragment {
private OnSignInListener onSignInListener;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//...
if (onSignInListener != null)
onSignInListener.onSignIn("email");
}
public void setOnSignInListener(OnSignInListener onSignInListener) {
this.onSignInListener = onSignInListener;
}
public interface OnSignInListener{
void onSignIn(String email);
}
}
SignInFragment
:
public class SignInFragment extends Fragment {
private String email;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//...
}
public void setEmail(String email) {
this.email = email;
}
}
你的活動:
public class MainActivity extends AppCompatActivity implements StartFragment.OnSignInListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//...
StartFragment startFragment = new StartFragment();
startFragment.setOnSignInListener(this);
}
@Override
public void onSignIn(String email) {
SignInFragment signInFragment = new SignInFragment();
signInFragment.setEmail(email);//set email
//replace fragment
//...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.