Android 将EditText值从片段传递到活动

Android 将EditText值从片段传递到活动,android,android-studio,android-fragments,Android,Android Studio,Android Fragments,我在一个活动的片段中有一个注册表格。当在片段中单击submit按钮时,我需要在主活动中实现一个函数。通过实施这一路线: android:onClick="signUp" 它直接进入活动。但是我怎样才能得到片段值呢?这很复杂,因为我的片段没有想法,因为我在同一个位置切换不同的片段 我尝试的是: public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle

我在一个活动的片段中有一个注册表格。当在片段中单击submit按钮时,我需要在主活动中实现一个函数。通过实施这一路线:

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

}

但我不知道现在该怎么办…

一个片段应该始终是可重用的,并且独立于其父活动。您的注册表单位于片段中,因此您可以读取片段实例中的所有值。在片段中而不是在活动中定义OnClickListener。您可以在片段中执行验证和数据处理,然后将所有值传递给片段的父活动。一个很好的方法是在片段中定义一个接口并在活动中实现它

该界面将有一个类似于
bool注册(字符串用户名、字符串电子邮件、字符串密码)
的方法。要从片段调用此方法,必须保留对父活动的引用,并将其转换为接口:

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(...);
}
通过该引用,您可以调用接口的方法:

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(...);
}

如果您在片段中使用onClick定义扩展布局,请确保在片段中实现该方法。

您可以通过在片段中使用接口并在您的活动中实现它来实现该方法,这正是您想要做的。如果是这样的话,你有什么问题?我编辑过,现在不知道如何获取值,这就是你需要知道的全部。如果您想在用户输入editText值后立即获取该值,请使用TextWatcher。现在我已在我的活动中覆盖了“bool signUp(字符串用户名、字符串电子邮件、字符串密码)”功能。什么时候调用它?很抱歉,但我仍然不明白这一点:我单击signUp按钮,获取Fragment类中的值并将其传递给接口的方法。那么,在我的活动中,它如何知道它与这些值有关?我如何告诉我的活动“现在您使用这些值并将其添加到数据库”我的片段:我的活动:@BaptisteArnaud您在活动中的
signUpSubmit
方法中没有定义我现在明白了。。。啊哈!非常感谢你!