在跳过一个中间的同时在活动之间发送数据 activity
Send data between activities while skipping one middle activity
我有一个包含三个活动的简单登录应用程序。
ActivityA
是启动器 activity 和登录屏幕。 ActivityB
有两个按钮,“配置”和“退出”。 ActivityC
是设置新用户名和密码的界面。
我还有一个叫 User 的 class。
我需要将数据从 ActivityA
发送到 ActivityC
。该数据是具有密码和用户名默认值的用户对象。
以下是我需要执行的步骤,顺序为:
1 - 使用 ActivityA
启动应用程序并单击按钮(“登录”)将我发送到 ActivityB
。
2 - 然后,在 ActivityB
中,我需要单击另一个按钮(“配置”),该按钮应将我发送到 ActivityC
。
3 - 从 ActivityC
,我设置了一个新密码和用户名,然后单击一个按钮(“确认”),它应该会把我送回 ActivityA
。
在 ActivityA
,我需要来自 ActivityC
的数据。该数据是一个具有新密码和用户名值的用户对象。
下面是活动A、B、C的画面,这样更容易理解。
这是ActivityA
:
这里是ActivityB
:
这里是 ActivityC
:
到目前为止,我已经完成了第 1 步和第 2 步。但是我不知道如何在不启动 ActivityC
的情况下将数据从 ActivityA
发送到 ActivityC
,因为当单击ActivityA
中的按钮,我将改为调用 ActivityB
。但是数据仍然需要提供给 ActivityC
.
我目前正在将数据从 ActivityA
传递到 ActivityB
,然后传递到 ActivityC
。这样可行。但我想知道这是否没有必要,是否有更好的方法。因为虽然我目前只有 3 个活动,但如果我有更多活动,继续像这样链接活动会变得很复杂,对吗?
目前我只知道如何用Intent传递数据。
如果可能的话,我还想传递完整的对象。而不是仅仅传递所述对象的字段(字符串、整数等)。
如果有办法,我该如何实现?谢谢。
为此使用共享首选项。
https://developer.android.com/training/data-storage/shared-preferences
如果我理解你的问题,最好的方法是使用 Intent
从 activity c
发送数据并将其显示在 activity a
。
以及如何使用 Intent:
Intent SendData = new Intent(ActivityC.this, ActivityA.class);
SendData.putExtra("user_name", NewUserEditText.getText().toString();
SendData.putExtra("password", PasswordEditText.getText().toString();
startActivity(SendData);
然后返回您的登录 activity
您想 fetch/recieve 这些值并执行。
//here your edit text where you will put value
EditText userEditText = findViewById(R.id.user_edit_text);
EditText passwordEditText = findViewById(R.id.password_edit_text);
//this string to fetch/receive user_name and password Values from activity C...
//You should write getStringExtra value the same as you wrote it in activity C...
String name = getIntent.getStringExtra("user_name");
String password = getIntent.getStringExtra("user_name");
///set values inside edit text...
userEditText.setText(name);
passwordEditText.setText(password);
要输入一次值并在每次打开应用程序时接收它,您应该使用 SharedPreferences
这里是怎么做的..
中activityC
//create Shared Preferences...
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
Editor editor = pref.edit();
// get values from EditText ..
String name_string= NewUserEditText.getText().toString();
String password_string = PasswordEditText.getText().toString();
//Storing data as KEY/VALUE pair
editor.putString("user_name", name_string); // Saving name string
editor.putString("password", password_string ); // Saving password string
// to Save the changes in SharedPreferences
editor.apply(); // commit changes
然后返回activity a ..你想接收存储值的地方
String name =pref.getString("user_name", "enter user name"); // getting name String
String password=pref.getString("password", ""); // getting password String
/*
*If value for key not exist then return second param value
* if values here don't exist in (ex. user_name), it will return "enter user name"
*/
//use these values in EditText
UsernameEditText.setText(name);
PasswordEditText.setText(password);
您只需输入一次值,当您再次打开应用程序时,值将出现在 activity a ...并且当您更改它们时,值将改变 ...
希望对你有帮助
我有一个包含三个活动的简单登录应用程序。
ActivityA
是启动器 activity 和登录屏幕。 ActivityB
有两个按钮,“配置”和“退出”。 ActivityC
是设置新用户名和密码的界面。
我还有一个叫 User 的 class。
我需要将数据从 ActivityA
发送到 ActivityC
。该数据是具有密码和用户名默认值的用户对象。
以下是我需要执行的步骤,顺序为:
1 - 使用 ActivityA
启动应用程序并单击按钮(“登录”)将我发送到 ActivityB
。
2 - 然后,在 ActivityB
中,我需要单击另一个按钮(“配置”),该按钮应将我发送到 ActivityC
。
3 - 从 ActivityC
,我设置了一个新密码和用户名,然后单击一个按钮(“确认”),它应该会把我送回 ActivityA
。
在 ActivityA
,我需要来自 ActivityC
的数据。该数据是一个具有新密码和用户名值的用户对象。
下面是活动A、B、C的画面,这样更容易理解。
这是ActivityA
:
这里是ActivityB
:
这里是 ActivityC
:
到目前为止,我已经完成了第 1 步和第 2 步。但是我不知道如何在不启动 ActivityC
的情况下将数据从 ActivityA
发送到 ActivityC
,因为当单击ActivityA
中的按钮,我将改为调用 ActivityB
。但是数据仍然需要提供给 ActivityC
.
我目前正在将数据从 ActivityA
传递到 ActivityB
,然后传递到 ActivityC
。这样可行。但我想知道这是否没有必要,是否有更好的方法。因为虽然我目前只有 3 个活动,但如果我有更多活动,继续像这样链接活动会变得很复杂,对吗?
目前我只知道如何用Intent传递数据。
如果可能的话,我还想传递完整的对象。而不是仅仅传递所述对象的字段(字符串、整数等)。
如果有办法,我该如何实现?谢谢。
为此使用共享首选项。 https://developer.android.com/training/data-storage/shared-preferences
如果我理解你的问题,最好的方法是使用 Intent
从 activity c
发送数据并将其显示在 activity a
。
以及如何使用 Intent:
Intent SendData = new Intent(ActivityC.this, ActivityA.class);
SendData.putExtra("user_name", NewUserEditText.getText().toString();
SendData.putExtra("password", PasswordEditText.getText().toString();
startActivity(SendData);
然后返回您的登录 activity
您想 fetch/recieve 这些值并执行。
//here your edit text where you will put value
EditText userEditText = findViewById(R.id.user_edit_text);
EditText passwordEditText = findViewById(R.id.password_edit_text);
//this string to fetch/receive user_name and password Values from activity C...
//You should write getStringExtra value the same as you wrote it in activity C...
String name = getIntent.getStringExtra("user_name");
String password = getIntent.getStringExtra("user_name");
///set values inside edit text...
userEditText.setText(name);
passwordEditText.setText(password);
要输入一次值并在每次打开应用程序时接收它,您应该使用 SharedPreferences
这里是怎么做的.. 中activityC
//create Shared Preferences...
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
Editor editor = pref.edit();
// get values from EditText ..
String name_string= NewUserEditText.getText().toString();
String password_string = PasswordEditText.getText().toString();
//Storing data as KEY/VALUE pair
editor.putString("user_name", name_string); // Saving name string
editor.putString("password", password_string ); // Saving password string
// to Save the changes in SharedPreferences
editor.apply(); // commit changes
然后返回activity a ..你想接收存储值的地方
String name =pref.getString("user_name", "enter user name"); // getting name String
String password=pref.getString("password", ""); // getting password String
/*
*If value for key not exist then return second param value
* if values here don't exist in (ex. user_name), it will return "enter user name"
*/
//use these values in EditText
UsernameEditText.setText(name);
PasswordEditText.setText(password);
您只需输入一次值,当您再次打开应用程序时,值将出现在 activity a ...并且当您更改它们时,值将改变 ...
希望对你有帮助