将返回值传递到不同的Activity

3

app design

我有一个应用程序,基本上看起来像附图中的设计。 如您所见,有4个活动,其中一些活动有片段。

我想把测试结果返回给用户的个人资料。 到目前为止,我一直在将结果上传到服务器,并在每次用户返回到ProfileActivity时更新用户的个人资料,但这似乎浪费资源。

在应用程序中是否有模式或方法可以做到这一点? 我查看了这里:如果我可以以某种方式链接两个startActivityForResult(),那么似乎是可行的。

我研究了这个问题中描述的代理模式,但我无法将UserFragment的实例传递给TestActivity

我希望有人能指导我正确的做法。


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Darsh Patel
2个回答

1
一种方法是使用 startActivityForResult() 而不结束任何 Activity
通过 startActivityForResult() 启动所有活动,然后根据您的条件可以结束活动。
使用 onActivityResult() 将结果传回上一个活动。
然后对于片段,您可以将片段对象存储在 ProfileActivity 中。 在片段中编写更新 UI 的方法。
因此,您可以使用片段对象访问该方法。
class ProfileActivity extends ......
{
  @override
  public void onActivityResult(....)
  {
    .....
    frgamnetObject.updateUI();
    ....
  }
}

我倾向于这种方法,但是我有一个问题。第二个活动(TestActivity)在测试完成后可能会继续进行。我可以在使用setResult(RESULT_OK, intent)发送结果后保持活动开启吗?还是必须调用finish()方法? - grooble
你可以继续运行,但最好的做法是完成当前任务,因为我们需要前一个活动的数据以便进行后续工作。如果必要,你也可以让它继续运行。 - N J
好的,这个可行并且看起来是最符合“Android”方式的做法。 - grooble

1
假设您从上一页获取了一个int值:
创建类:
public class GenericUtility {

public static int getIntFromSharedPrefsForKey(String key, Context context)
{
    int selectedValue = 0;

    SharedPreferences prefs = context.getSharedPreferences("com.your.packagename", Context.MODE_PRIVATE);
    selectedValue = prefs.getInt(key, 0);

    return selectedValue;
}

public static boolean setIntToSharedPrefsForKey(String key, int value, Context context)
{
    boolean savedSuccessfully = false;

    SharedPreferences prefs = context.getSharedPreferences("com.your.packagename", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();

    try
    {
        editor.putInt(key, value);
        editor.apply();
        savedSuccessfully = true;
    }
    catch (Exception e)
    {
        savedSuccessfully = false;
    }

    return savedSuccessfully;
}

public static String getStringFromSharedPrefsForKey(String key, Context context)
{
    String selectedValue = "";

    SharedPreferences prefs = context.getSharedPreferences("com.your.packagename", Context.MODE_PRIVATE);
    selectedValue = prefs.getString(key, "");

    return selectedValue;
}

public static boolean setStringToSharedPrefsForKey(String key, String value, Context context)
{
    boolean savedSuccessfully = false;

    SharedPreferences prefs = context.getSharedPreferences("com.your.packagename", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();

    try
    {
        editor.putString(key, value);
        editor.apply();
        savedSuccessfully = true;
    }
    catch (Exception e)
    {
        savedSuccessfully = false;
    }

    return savedSuccessfully;
}
}

比将整数值设置为它更好:
GenericUtility.setIntToSharedPrefsForKey("selected_theme", 1, getApplicationContext());

或者

GenericUtility.setIntToSharedPrefsForKey("selected_theme", 1, MyActivity.this))

如果您在第一次活动中需要结果:

int selectedValue = GenericUtility.getIntFromSharedPrefsForKey("selected_theme", getApplicationContext());

或者

int selectedValue = GenericUtility.getIntFromSharedPrefsForKey("selected_theme", MyActivity.this);

如果selectedValue为空,则返回默认值。 请将类中的int更改为String,以相应地获取和设置结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接