我是Android应用程序开发的新手,当我通过活动传递参数时,我遇到以下问题。在我的应用程序中,用户输入他的电子邮件,用户名和密码,单击提交按钮,然后他转到下一个活动(NewProfile.class),其中他的用户名应该在TextView中打印。但是当用户正确填写所有字段并显示Toast“Welcome to Allamoda”时,每个字段变为红色(仅当用户输入错误时才会发生这种情况)然后返回MainActivity。
Signup.class代码:
package dmst.allamoda;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
public class Signup extends ActionBarActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
setupVariables();
}
private EditText email;
private EditText username;
private EditText password1;
private EditText password2;
public static String PUBLIC_STATIC_STRING_IDENTIFIER = "";
public void signupControl(View view) {
if ((email.getText().toString().trim().length() > 0) && (username.getText().toString().trim().length() > 0) && (password1.getText().toString().trim().length() > 0) &&
(password2.getText().toString().trim().length() > 0) && (password1.getText().toString().equals(password2.getText().toString()))) {
Toast.makeText(getApplicationContext(), "Welcome to AllaModa!",
Toast.LENGTH_SHORT).show();
Intent resultIntent = new Intent(this, NewProfile.class);
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, username.getText().toString());
setResult(NewProfile.RESULT_OK, resultIntent);
finish();
} else {
if (!(email.getText().toString().trim().length() > 0)) {
Toast.makeText(getApplicationContext(), " email!",
Toast.LENGTH_SHORT).show();
}
if (!(username.getText().toString().trim().length() > 0)) {
Toast.makeText(getApplicationContext(), " username!",
Toast.LENGTH_SHORT).show();
}
if (!(password1.getText().toString().trim().length() > 0)) {
Toast.makeText(getApplicationContext(), " password!",
Toast.LENGTH_SHORT).show();
}
if (!(password2.getText().toString().trim().length() > 0)) {
Toast.makeText(getApplicationContext(), " password!",
Toast.LENGTH_SHORT).show();
} else {
if (!(password1.getText().toString().equals(password2.getText().toString()))) {
Toast.makeText(getApplicationContext(), "passwords!",
Toast.LENGTH_SHORT).show();
}
}
}
email.setBackgroundColor(Color.parseColor("#F5CCCC"));
email.setTextColor(Color.parseColor("#B80000"));
username.setBackgroundColor(Color.parseColor("#F5CCCC"));
username.setTextColor(Color.parseColor("#B80000"));
password1.setBackgroundColor(Color.parseColor("#F5CCCC"));
password1.setTextColor(Color.parseColor("#B80000"));
password2.setBackgroundColor(Color.parseColor("#F5CCCC"));
password2.setTextColor(Color.parseColor("#B80000"));
}
private void setupVariables() {
email = (EditText) findViewById(R.id.signupEmail);
username = (EditText) findViewById(R.id.signupUsername);
password1 = (EditText) findViewById(R.id.signup1Password);
password2 = (EditText) findViewById(R.id.signup2Password);
}
}
答案 0 :(得分:2)
Signup
未转换为NewProfile
活动。它返回到之前的活动(大概是MainActivity
)。
这是问题代码:
Intent resultIntent = new Intent(this, NewProfile.class);
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, username.getText().toString());
setResult(NewProfile.RESULT_OK, resultIntent);
finish();
据推测,你想做这样的事情:
Intent intent = new Intent(this, NewProfile.class);
intent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, username.getText().toString());
startActivity(intent);
finish();
[EDITED]
最后的finish();
语句应该将Signup
活动保留在更现代的设备中的历史堆栈之外。但是,这个答案的一些评论者(@AndrewBreen和@Cookster)表示这样做可能不适用于速度较慢的设备。
如果您对此感到担心,@ Cookster的评论提供了一个可能的解决方案,以避免拨打finish()
:
我用来避免这种情况的模式是打开活动 登录活动在onActivityResult中的路由容量中起作用,即 它检查登录状态,如果无效,则打开登录活动, 否则会执行需要身份验证状态等的操作。
答案 1 :(得分:0)
在活动a上尝试这个
Intent i = new Intent(this, ActivityB.class);
i.putExtra("SomeKEY",YourData);
在oncreate方法中的活动B
Bundle extras = getIntent().getExtras();
if(extras !=null)
if(extras !=null) {String value = extras.getString("KEY");}