我想知道如何在导航过程中将数据保存在多个活动中。在多个android活动中保存数据
我在我的申请中有两种形式,account details
和personal details
,每种都有自己的活动。当用户单击account details
活动中的next
按钮时,它会将其带到personal details
活动。 personal details
活动还有一个后退按钮,可让用户回到account details
活动。
我想要的是,当用户点击next
按钮,它会保存数据在account details
活动,以便当用户返回到account details
活动可以显示。另外,当用户在personal details
活动中输入数据并且可能通过单击back
回到account details
活动时,应该保存personal details
活动中的数据,以便当用户再次移动到personal details
活动时,他可以找到他的数据。
我所做的是覆盖onActivityResult
方法和增加了一些方法将数据保存在account details
活动,如下所示:
package com.example.karyukie.application;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.InputType;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class AccountDetails extends AppCompatActivity {
EditText usernameSignUp, newPwd, confirmPwd, securityA;
Spinner securityQ;
private static final String USERNAME_SIGN_UP = "usernameSignUp_key";
private static final String PWD_SIGN_UP = "pwdSignUp_key";
private static final String SECURITY_Q = "securityQ_key";
private static final String SECURITY_A = "securityA_key";
@Override
protected void onCreate(Bundle savedInstanceState) {
usernameSignUp = (EditText) findViewById(R.id.usernameSignUp_editText);
newPwd = (EditText) findViewById(R.id.newPwd_editText);
confirmPwd = (EditText) findViewById(R.id.confirmPwd_editText);
securityQ = (Spinner) findViewById(R.id.securityQ_spinner);
securityA = (EditText) findViewById(R.id.securityA_editText);
securityQ.setSelection(9);
Button next = (Button) findViewById(R.id.next_button);
assert next != null;
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bundle accountDetails_data = saveData();
Intent intent = new Intent(getApplicationContext(), PersonalDetails.class);
intent.putExtras(accountDetails_data);
startActivityForResult(intent, 1);
}
}
});
public Bundle saveData() {
String usernameSignUp_value = usernameSignUp.getText().toString();
String pwdSignUp_value = newPwd.getText().toString();
int securityQ_value = securityQ.getSelectedItemPosition();
String securityA_value = securityA.getText().toString();
Bundle data = new Bundle();
data.putString(USERNAME_SIGN_UP, usernameSignUp_value);
data.putString(PWD_SIGN_UP, pwdSignUp_value);
data.putInt(SECURITY_Q, securityQ_value);
data.putString(SECURITY_A, securityA_value);
return data;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 1) {
if(resultCode == Activity.RESULT_OK) {
usernameSignUp.setText(data.getStringExtra(USERNAME_SIGN_UP));
newPwd.setText(data.getStringExtra(PWD_SIGN_UP));
confirmPwd.setText(data.getStringExtra(PWD_SIGN_UP));
securityQ.setSelection(data.getIntExtra(SECURITY_Q, 10));
securityA.setText(data.getStringExtra(SECURITY_A));
}
}
}
而在personal details
活动:
Button back = (Button) findViewById(R.id.back_button);
assert back != null;
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bundle data = getIntent().getExtras();
Intent intent = new Intent();
intent.putExtras(data);
setResult(Activity.RESULT_OK, intent);
finish();
}
});
这似乎工作正常,但我不知道如何将数据保存在personal details
活动中,如前所述。
意图很适合在活动间发送数据,但是在整个应用程序中存在持久存储的更多选项。 https://developer.android.com/training/basics/data-storage/index.html –