我想知道如何在导航过程中保存多个活动的数据。
我的应用程序中有2个表单account details
和personal details
,每个表单都有自己的活动。当用户点击next
活动中的account details
按钮时,会将他带到personal details
活动。 personal details
活动还有一个后退按钮,可将用户带回account details
活动。
我想要的是,当用户点击next
按钮时,它会将数据保存在account details
活动中,以便在用户返回account details
时显示该数据活动。此外,当用户在personal details
活动中输入数据并可能通过点击account details
移回back
活动时,应保存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
活动中保存数据,如前所述。
答案 0 :(得分:1)
如果您不想使用Intents传递数据。您还可以使用Shared Preferences在活动之间共享数据。
您可以通过调用以下方式获取首选项对象:
self.bad_method()
然后(以String数据为例)使用:
存储bad_method
并使用以下方式获取数据:
SharedPreferences sharedPreferences = context.getSharedPreferences();
答案 1 :(得分:0)
当用户点击帐户详细信息返回给个人时,如果您尚未完成个人详细信息活动,则无需保存数据,反之亦然。
您可以在公共静态变量上保存数据。这是最简单的方法,您也可以使用活动之间的意图传输数据。