嗨,我知道这个问题有答案。我已经尝试了所有这些,但它在我的应用程序中无效。我有两个片段(登录和密码),我想将电子邮件和手机号码从Login片段传递到Password片段。我尝试了很多,但我无法得到解决方案。
请有人帮助我。
LoginFragment:
public class LoginFragment extends Fragment {
private SlidingTabLayout mSlidingTabLayout;
private ViewPager mViewPager;
SharedPreferences pref = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_login, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// BEGIN_INCLUDE (setup_viewpager)
// Get the ViewPager and set it's PagerAdapter so that it can display items
mViewPager = (ViewPager) view.findViewById(R.id.loginpager);
mViewPager.setAdapter(new TabsAdapter());
// END_INCLUDE (setup_viewpager)
// BEGIN_INCLUDE (setup_slidingtablayout)
// Give the SlidingTabLayout the ViewPager, this must be done AFTER the ViewPager has had
// it's PagerAdapter set.
mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs);
mSlidingTabLayout.setViewPager(mViewPager);
// END_INCLUDE (setup_slidingtablayout)
}
public class TabsAdapter extends PagerAdapter {
@Override
public boolean isViewFromObject(View view, Object o) {
return o == view;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0: return "SIGN IN";
case 1: return "SIGN UP";
}
return "";
}
// END_INCLUDE (pageradapter_getpagetitle)
@Override
public int getCount() {
// get item count - equal to number of tabs
return 2;
}
/**
* Instantiate the {@link View} which should be displayed at {@code position}. Here we
* inflate a layout from the apps resources and then change the text view to signify the position.
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
// Inflate a new layout from our resources
View view = null;
switch (position) {
case 0: view = getActivity().getLayoutInflater().inflate(R.layout.fragment_signin,
container, false);
signinListener(view);
break;
case 1: view = getActivity().getLayoutInflater().inflate(R.layout.fragment_signup,
container, false);
signupListener(view);
break;
}
container.addView(view);
return view;
}
EditText Name;
EditText EmailId;
EditText Phone;
Button Signup;
// Progress Dialog Object
ProgressDialog prgDialog;
// Error Msg TextView Object
TextView errorMsg;
TextView signUperrorMsg;
EditText username;
EditText password;
Button Signin;
public void signinListener(View signinView) {
username = (EditText) signinView.findViewById(R.id.signin_mobile);
password = (EditText) signinView.findViewById(R.id.signin_password);
Signin = (Button) signinView.findViewById(R.id.signButton);
// Find Error Msg Text View control by ID
errorMsg = (TextView)signinView.findViewById(R.id.login_error);
prgDialog = new ProgressDialog(getActivity());
// Set Progress Dialog Text
prgDialog.setMessage("Please wait...");
// Set Cancelable as False
prgDialog.setCancelable(false);
//Validation for signin field while clicking signin button
Signin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String usrname = username.getText().toString();
String usrpassword = password.getText().toString();
// Instantiate Http Request Param Object
RequestParams params = new RequestParams();
if (Utility.isNotNull(usrname) && Utility.isNotNull(usrpassword)) {
// When Email entered is Valid
if (Utility.validate(usrname)) {
// Put Http parameter username with value of Email Edit View control
params.put("mobile", usrname);
// Put Http parameter password with value of Password Edit Value control
params.put("pwd",usrpassword);
// Invoke RESTful Web Service with Http parameters
signinWS(params);
}
// When Email is invalid
else {
Toast.makeText(getActivity().getApplicationContext(), "Please enter valid mobile", Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(getActivity().getApplicationContext(), "Please fill the form, don't leave any field blank", Toast.LENGTH_LONG).show();
}
}
});
}
/*
Function to set the onclick listener for signup tab
*/
public void signupListener(View signUpView) {
Name = (EditText) signUpView.findViewById(R.id.signup_name);
EmailId= (EditText) signUpView.findViewById(R.id.signup_email);
Phone= (EditText) signUpView.findViewById(R.id.signup_phone);
Signup = (Button) signUpView.findViewById(R.id.signupButton);
// Find Error Msg Text View control by ID
signUperrorMsg = (TextView)signUpView.findViewById(R.id.signup_error);
prgDialog = new ProgressDialog(getActivity());
// Set Progress Dialog Text
prgDialog.setMessage("Please wait...");
// Set Cancelable as False
prgDialog.setCancelable(false);
//Allow only characters and space in name field
Name.setFilters(new InputFilter[]{
new InputFilter() {
@Override
public CharSequence filter(CharSequence cs, int start,
int end, Spanned spanned, int dStart, int dEnd) {
// TODO Auto-generated method stub
if (cs.equals("")) { // for backspace
return cs;
}
if (cs.toString().matches("[a-zA-Z ]+")) {
return cs;
}
return "";
}
}
});
//Validation for signup field while clicking signup button
Signup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String sName = Name.getText().toString();
String sPhoneNo = Phone.getText().toString();
String sEmailId = EmailId.getText().toString();
// Instantiate Http Request Param Object
RequestParams params = new RequestParams();
if (Utility.isNotNull(sName) && Utility.isNotNull(sPhoneNo) && Utility.isNotNull(sEmailId) ) {
if (Utility.line2_validate(sName)) {
if (Utility.validate(sPhoneNo)) {
if (Utility.email_validate(sEmailId)) {
// Put Http parameter username with value of Name Edit View control
params.put("name", sName);
// Put Http parameter email with value of Email Edit Value control
params.put("email", sEmailId);
// Put Http parameter mobile with value of Mobile Edit Value control
params.put("mobile", sPhoneNo);
// Invoke Signup RESTful Web Service with Http parameters
signUpWS(params);
}
else {
EmailId.setError("Enter valid Email");
}
}
else {
Phone.setError("Enter valid Mobile");
}
}
else {
Name.setError("Enter valid Name");
}
}
else {
Toast.makeText(getActivity().getApplicationContext(), "Please fill the form, don't leave any field blank", Toast.LENGTH_SHORT).show();
}
}
});
}
/*
Function to invoke the WS for signin activity
*/
public void signinWS(RequestParams params){
// Show Progress Dialog
prgDialog.show();
// Make RESTful webservice call using AsyncHttpClient object
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://example.com/signin", params, new AsyncHttpResponseHandler() {
// When the response returned by REST has Http response code '200'
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// Hide Progress Dialog
prgDialog.hide();
try {
// JSON Object
JSONObject obj = new JSONObject(new String(response));
// When the JSON response has status boolean value assigned with true
if (obj.getBoolean("status")) {
Toast.makeText(getActivity().getApplicationContext(), "You are successfully logged in!", Toast.LENGTH_LONG).show();
// Navigate to Home screen
pref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putInt(getString(R.string.signedupflag), 1);
editor.putString("name", username.getText().toString());
editor.commit();
((MainActivity) getActivity()).navigatetoSearchActivity();
}
// Else display error message
else {
errorMsg.setText(obj.getString("error_msg"));
Toast.makeText(getActivity().getApplicationContext(), obj.getString("error_msg"), Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
Toast.makeText(getActivity().getApplicationContext(), "Error Occured [Server's JSON response might be invalid]!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
// When the response returned by REST has Http response code other than '200'
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responsebody, Throwable error) {
// Hide Progress Dialog
prgDialog.hide();
// When Http response code is '404'
if (statusCode == 404) {
Toast.makeText(getActivity().getApplicationContext(), "Requested resource not found", Toast.LENGTH_LONG).show();
}
// When Http response code is '500'
else if (statusCode == 500) {
Toast.makeText(getActivity().getApplicationContext(), "Something went wrong at server end", Toast.LENGTH_LONG).show();
}
// When Http response code other than 404, 500
else {
Toast.makeText(getActivity().getApplicationContext(), "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running]", Toast.LENGTH_LONG).show();
}
}
});
}
/**
* Destroy the item from the {@link ViewPager}. In our case this is simply removing the
* {@link View}.
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
/*
Function to invoke the WS for signin activity
*/
public void signUpWS(RequestParams params){
// Show Progress Dialog
prgDialog.show();
// Make RESTful webservice call using AsyncHttpClient object
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://example.com/signup", params, new AsyncHttpResponseHandler() {
// When the response returned by REST has Http response code '200'
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// Hide Progress Dialog
prgDialog.hide();
try {
// JSON Object
JSONObject obj = new JSONObject(new String(response));
// When the JSON response has status boolean value assigned with true
if (obj.getBoolean("status")) {
Toast.makeText(getActivity().getApplicationContext(), "You are successfully Signed Up!", Toast.LENGTH_LONG).show();
//Pass value from this fragment
PasswordFragment pf = new PasswordFragment();
Bundle args = new Bundle();
args.putString("email",EmailId.getText().toString());
pf.setArguments(args);
getFragmentManager().beginTransaction().add(R.id.content_frame,pf).commit();
((MainActivity) getActivity()).navigatetoPasswordActivity();
}
// Else display error message
else {
signUperrorMsg.setText(obj.getString("msg"));
Toast.makeText(getActivity().getApplicationContext(), obj.getString("msg"), Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
Toast.makeText(getActivity().getApplicationContext(), "Error Occured [Server's JSON response might be invalid]!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
// When the response returned by REST has Http response code other than '200'
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responsebody, Throwable error) {
// Hide Progress Dialog
prgDialog.hide();
// When Http response code is '404'
if (statusCode == 404) {
Toast.makeText(getActivity().getApplicationContext(), "Requested resource not found", Toast.LENGTH_LONG).show();
}
// When Http response code is '500'
else if (statusCode == 500) {
Toast.makeText(getActivity().getApplicationContext(), "Something went wrong at server end", Toast.LENGTH_LONG).show();
}
// When Http response code other than 404, 500
else {
Toast.makeText(getActivity().getApplicationContext(), "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running]", Toast.LENGTH_LONG).show();
}
}
});
}
}
}
PasswordFragament:
public class PasswordFragment extends Fragment {
EditText verifyCode;
EditText new_pwd;
EditText confirm_pwd;
TextView pwd_error_msg;
Button pwd_ok;
// Progress Dialog Object
ProgressDialog prgDialog;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.password, container,false);
//Retrive value from login fragment
final String email = getArguments().getString("email");
verifyCode = (EditText)view.findViewById(R.id.mobie_verification);
new_pwd = (EditText)view.findViewById(R.id.new_password);
confirm_pwd = (EditText)view.findViewById(R.id.confirm_password);
pwd_error_msg = (TextView)view.findViewById(R.id.pwd_error_msg);
pwd_ok = (Button)view.findViewById(R.id.password_button);
prgDialog = new ProgressDialog(getActivity());
// Set Progress Dialog Text
prgDialog.setMessage("Please wait...");
// Set Cancelable as False
prgDialog.setCancelable(false);
pwd_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String strPwd = new_pwd.getText().toString();
String strConfPwd = confirm_pwd.getText().toString();
String strVerifyCode = verifyCode.getText().toString();
// Instantiate Http Request Param Object
RequestParams params = new RequestParams();
if (Utility.isNotNull(strPwd)) {
if (Utility.isNotNull(strConfPwd)) {
if ((strPwd.length() > 3 ) && (strPwd.length() < 8 ) ) {
pwd_error_msg.setText(null);
if (strPwd.equals(strConfPwd)) {
//password and confirm passwords equal.go to next step
pwd_error_msg.setText(null);
//Toast.makeText(getActivity().getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
params.put("email", email);
// Put Http parameter verificationCode with value of Verificationcode Edit View control
params.put("key", strVerifyCode);
// Put Http parameter password with value of Password Edit Value control
params.put("code", strPwd);
params.put("mobile", "9966338856");
pwdWS(params);
} else {
//passwords not matching.please try again
pwd_error_msg.setText("Password does not Match!");
}
}
else {
pwd_error_msg.setText("Password should be from 4 to 8 characters.");
}
}
else {
confirm_pwd.setError("Confirm Password must be filled out");
}
}
else {
new_pwd.setError("New Password must be filled out");
}
}
});
return view;
}
/*
Function to invoke the WS for signin activity
*/
public void pwdWS(RequestParams params){
// Show Progress Dialog
prgDialog.show();
// Make RESTful webservice call using AsyncHttpClient object
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.example.com/mverify", params, new AsyncHttpResponseHandler() {
// When the response returned by REST has Http response code '200'
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// Hide Progress Dialog
prgDialog.hide();
try {
// JSON Object
JSONObject obj = new JSONObject(new String(response));
// When the JSON response has status boolean value assigned with true
if (obj.getBoolean("status")) {
Toast.makeText(getActivity().getApplicationContext(), "Password Successfully Created!", Toast.LENGTH_LONG).show();
// Navigate to Home screen
/*pref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putInt(getString(R.string.signedupflag), 1);
editor.putString("name", username.getText().toString());
editor.commit();*/
((MainActivity) getActivity()).navigatetoSearchActivity();
}
// Else display error message
else {
pwd_error_msg.setText(obj.getString("msg"));
Toast.makeText(getActivity().getApplicationContext(), obj.getString("msg"), Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
Toast.makeText(getActivity().getApplicationContext(), "Error Occured [Server's JSON response might be invalid]!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
// When the response returned by REST has Http response code other than '200'
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responsebody, Throwable error) {
// Hide Progress Dialog
prgDialog.hide();
// When Http response code is '404'
if (statusCode == 404) {
Toast.makeText(getActivity().getApplicationContext(), "Requested resource not found", Toast.LENGTH_LONG).show();
}
// When Http response code is '500'
else if (statusCode == 500) {
Toast.makeText(getActivity().getApplicationContext(), "Something went wrong at server end", Toast.LENGTH_LONG).show();
}
// When Http response code other than 404, 500
else {
Toast.makeText(getActivity().getApplicationContext(), "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running]", Toast.LENGTH_LONG).show();
}
}
});
}
}
答案 0 :(得分:2)
1)在片段2中创建一个接口
2)在您的活动中实施此界面
3)将活动的对象转换为片段中的接口,并使用您想要传递的数据调用它的方法。
4)在Interface的方法中,来自活动使用&#34; getFragmentManager()。findFragmentbyId(...)&#34;获取第二个片段的对象,并使用此对象将数据传递给fragment2。
请参阅此链接:http://developer.android.com/training/basics/fragments/communicating.html
示例:http://simpledeveloper.com/how-to-communicate-between-fragments-and-activities/
答案 1 :(得分:1)
使用Bundle发送字符串:
//Put the value
YourNewFragment ldf = new YourNewFragment ();
Bundle args = new Bundle();
args.putString("YourKey", "YourValue");
ldf.setArguments(args);
//Inflate the fragment
getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();
在新片段的onCreateView(onCreateView)中:
//Retrieve the value
String value = getArguments().getString("YourKey");