簡體   English   中英

從片段傳遞EditText值到Activity

[英]passing EditText values from Fragment to Activity

我在一個Activity中包含的片段中有一個注冊表格。 單擊片段中的提交按鈕時,我需要在主活動中實現一個功能。 通過實現這一行:

android:onClick="signUp"

它直接進入活動。 但是,如何獲取Fragment值? 這很復雜,因為我的片段不知道,因為我在同一位置切換了不同的片段。

我試過了

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_sign_up, container, false);
    email =(EditText) v.findViewById(R.id.emailEt);
    mListener.setEmail(email.getText().toString());
    pass1 = (EditText) v.findViewById(R.id.passEt1);
    mListener.setPass1(pass1.getText().toString());
    pass2 = (EditText) v.findViewById(R.id.passEt2);
    mListener.setPass2(pass2.getText().toString());
    pseudo = (EditText) v.findViewById(R.id.pseudoEt);
    mListener.setPseudo(pseudo.getText().toString());
    signup =(Button) v.findViewById(R.id.signUpB);

    return v;
}

public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onSignUpFragmentInteraction(Uri uri);
    public void setEmail(String email);
    public void setPass1(String pass1);
    public void setPass2(String pass2);
    public void setPseudo(String pseudo);
}

然后在我的活動中:

@Override
public void setEmail(String email) {

}

@Override
public void setPass1(String pass1) {

}

@Override
public void setPass2(String pass2) {

}

@Override
public void setPseudo(String pseudo) {

}

@Override
public void onLoginFragmentInteraction(Uri uri) {

}

但是我不知道該怎么辦...

片段應始終可重用,並獨立於其父活動。 您的注冊表單位於Fragment中,因此您可以讀取Fragment實例中的所有值。 在片段而不是活動中定義OnClickListener。 您可以在Fragment中進行驗證和數據處理,然后將所有值傳遞給Fragment的父Activity。 一個很好的方法是在Fragment中定義一個Interface並在Activity中實現它。 看這里

接口將具有類似bool signUp(String username, String email, String password) 要從您的Fragment調用此方法,您必須保留對投射到接口的父活動的引用:

private OnFragmentInteractionListener mCallback;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    // This makes sure that the container activity has implemented
    // the callback interface. If not, it throws an exception
    try {
        mCallback = (OnFragmentInteractionListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

通過該引用,您可以調用Interface的方法:

public void signUp(View v) {
    // get your values here
    mCallback.signUp(...);
}

如果您在Fragment中使用onClick定義對布局進行充氣,請確保在Fragment中實現該方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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