2017-04-08 22 views
1

アクティビティに含まれるフラグメントにサインアップフォームがあります。フラグメント内でサブミットボタンをクリックすると、メインのアクティビティに関数を実装する必要があります。フラグメントからアクティビティへのEditText値の受け渡し

android:onClick="signUp" 

アクティビティに直接移動します。しかし、どのようにフラグメント値を取得できますか?同じ場所で別々のフラグメントを切り替えるため、私のフラグメントにはアイデアがないので、複雑です。

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) { 

} 

しかし、私は今何をすべきかわからない...

+0

フラグメントにインターフェイスを設定して、それを自分のアクティビティに実装することができます。あなたが持っている問題は何ですか? –

+0

編集しました。値を取得する方法がありません –

+0

https://developer.android.com/training/basics/fragments/communicating.html これはあなたが知る必要があるすべてです。 editTextの値をユーザーが入力するとすぐに取得する場合は、TextWatcherを使用します。 –

答えて

2

Aフラグメントは、常に再利用可能でなければなりませんその親活動から独立しています。あなたのサインアップフォームはFragmentにありますので、Fragmentインスタンス内のすべての値を読むことができます。アクティビティではなく、フラグメントにOnClickListenerを定義します。フラグメントで検証とデータ処理を行い、すべての値をフラグメントの親アクティビティに渡すことができます。これを行う良い方法は、FragmentにInterfaceを定義し、それをActivityに実装することです。 See here

インターフェイスにはbool signUp(String username, String email, String password)のようなメソッドがあります。あなたがインターフェイスにキャストあなたの親アクティビティへの参照を維持する必要がありますあなたの断片からこのメソッドを呼び出すには:

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"); 
    } 
} 

その参照を使用すると、インターフェイスのメソッドを呼び出すことができます。

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

あなたの場合あなたのFragmentのonClick定義を使ってレイアウトを膨張させ、あなたのFragmentにそのメソッドを実装してください。

+0

これで私の活動で「bool signUp(String username、String email、String password)」という文字列を上書きしました。いつ呼び出されますか? –

+0

@BaptisteArnaudは私の答えを更新しました –

+0

申し訳ありませんが、私はまだこれを理解していません。私はsignUpボタンをクリックし、Fragmentクラスの値をフェッチして、インターフェースのメソッドに渡します。それから私の活動では、これらの値で何かをしなければならないことをどうやって知っていますか? 「今、あなたはこれらの値を使用してデータベースに追加しています」 –

関連する問題