将值返回到其他Activity

时间:2015-07-04 07:21:18

标签: android android-fragments android-intent android-activity delegates

app design

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

我希望将测试的答案反馈给用户的个人资料。 到目前为止,我一直在将结果上传到服务器,让应用每次返回 ProfileActivity 时都会更新用户的个人资料,但这似乎是浪费资源。

在应用中是否有模式或方法可以执行此操作? 我看了this:如果我能以某种方式链接两个startActivityForResult(),这似乎是可行的。

我研究了使用this question中描述的委托模式,但我无法将 UserFragment 的实例添加到 TestActivity

我希望有人可以指出我正确的方法。

2 个答案:

答案 0 :(得分:1)

一种方法是使用startActivityForResult()不完成任何Activity

startActivityForResult()开始所有活动,然后根据您的情况完成活动

使用onActivityResult()

将结果传回上一个活动

然后,对于片段,您可以将片段对象存储在 ProfileActivity 中。 在Fragment中用于更新UI的方法

因此,您可以使用片段对象

访问该方法
class ProfileActivity extends ......
{
  @override
  public void onActivityResult(....)
  {
    .....
    frgamnetObject.updateUI();
    ....
  }
}

答案 1 :(得分: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;
}
}

而不是设置int值:

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将返回默认值。 PS将int更改为类中的String以相应地获取和设置结果。