我有两个班级“A”和班级“B”。在A级我宣布了一个 字符串密码=“admin”。现在在B类我正在从用户和i获取价值 想要在A类中更改字符串的值,并希望存储该值 用户输入。我怎样才能做到这一点?有什么帮助吗?
A级
forgetpassword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent j = new Intent(MainActivity.this,newpassword.class);
startActivity(j);
B类
EditText newpassword;
Button change;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_password);
newpassword = (EditText)findViewById(R.id.newpassword);
change = (Button)findViewById(R.id.chnage);
change.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.b= newpassword.getText().toString();
Intent y= new Intent(NewPassword.this,MainActivity.class);
startActivity(y);
}
});
答案 0 :(得分:1)
当您打算从活动中获得一些结果时,您应该使用startActivityForResult(intent,requestcode)
StartActivity
Intent i = new Intent(MainActivity.this, ForgotPasswordActivity.class);
startActivityForResult(i, 1);
在ForgotPasswordActivity中设置新密码
现在您处于ForgotPasswordActivity,设置新密码并返回按钮上的MainActivity,如下所示。
change.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent y= new Intent(NewPassword.this,MainActivity.class);
y.putExtra("someKey",newpassword.getText().toString()); //set new password
setResult(Activity.RESULT_OK, returnIntent); // set your result
finish(); // return back to MainActivity
}
});
在MainActivity中重新获取新密码
现在您导航回MainActivty以检索新密码覆盖onActivityResultMethod()
。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == Activity.RESULT_OK){
String newPassword=data.getStringExtra("someKey");
}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
上的链接
答案 1 :(得分:0)
当您完成活动时,这可能导致上下文泄漏或NPE。
而是使用Application类并在其中初始化字符串变量,并使用localDictionary.allKeys[indexPath.row] as! String
和const tl = new TimelineLite();
tl.staggerFromTo(
[fabricObject],
1,
{left: -config.width},
{left: config.width, onUpdate: () => canvas.renderAll()},
0.4);
来访问变量。
getters()
CLASSA:
setters()
CLASSB:
public class BaseApplication extends android.app.Application{
private String admin;
@Override
onCreate(...){
this.admin = "";
}
public String getAdmin(){
return this.admin;
}
public void setAdmin(String admin){
this.admin = admin;
}
}
同样在您的清单文件中。
...
((BaseApplication) getApplicationContext()).setAdmin("!mpr355!v3");
...
...
String myAdmin = ((BaseApplication) getApplicationContext()).getAdmin();
...
`...>
<强>更新强>
在<application
之前
只需致电
android:name=".BaseApplication"
在您的MainActivity中,请致电startActivity(y);
检查空指针,你很高兴! :)
答案 2 :(得分:0)
您可以在意图中将数据从一个活动发送到另一个活动,使用意图类的putExtra()
方法传递数据。像这样发送数据
Intent y= new Intent(NewPassword.this,MainActivity.class);
y.putExtra("yourKey",newpassword.getText().toString())
startActivity(y);
在onCreate()
的{{1}}中,您可以使用MianActivity
这样检索值
getStringExtra("yourKey")
并使用密码。
或者,您可以针对结果启动Intent callingIntent = getIntent();
String password = callingIntent.getStringExtra("yourKey");
活动,并将数据恢复到NewPassword
onActivityResult()
并在更改按钮中单击处理程序
Intent newPasswordIntent = new Intent(this,NewPassword.class);
startActivityForResult(newPasswordIntent ,REQUEST_CODE);
公共静态变量很容易调用,请注意它们可能导致内存泄漏
答案 3 :(得分:0)
穆罕默德,
有很多方法可以做到这一点和一些列表,
如果你想改变很多时间,那么我认为广播接收器很好,
这是广播接收器的例子,
在您的活动中具有特定操作的注册广播接收器
private BroadcastReceiver brodcastRec=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent!=null && intent.getAction().equals("changePassword")){
String newPassword=intent.getStringExtra("newPassword");
//do whatever you want to do here after getting new password
}
}
};
然后在创建活动A后写下以下代码
IntentFilter intentFilter=new IntentFilter("changePassword");
registerReceiver(brodcastRec,intentFilter);
在您的活动B中或点击按钮事件
Intent intent=new Intent();
intent.setAction("changePassword");
intent.putExtra("newPassword","yourValue");
sendBroadcast(intent);