在跳过一个中间的同时在活动之间发送数据 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

如果我理解你的问题,最好的方法是使用 Intentactivity 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 ...并且当您更改它们时,值将改变 ...

希望对你有帮助