簡體   English   中英

如何在片段之間傳遞字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM