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