【问题标题】:Android: pass data from activity with 3 fragments to previous activityAndroid:将数据从具有 3 个片段的活动传递到先前的活动
【发布时间】:2015-06-04 09:33:41
【问题描述】:

我正在使用 Android Studio 构建一个 Android 应用。 假设我有 Activity1 和 Activity2。 Activity2 有 3 个片段(3 个选项卡)。 我设法通过使用片段适配器将数据从 Activity1 传递到 Activity2,然后从 Activity2 传递到它的片段。

1) 我想做相反的事情:从所有 3 个片段中收集数据并将其传递给它们所在的活动 (Activity2),然后将数据从 Activity2 传递回 Activity1。

我已经实现了一个将数据从一个片段传递到 Activity2 的接口,但是我如何(以及何时)将数据从所有 3 个片段传递到 Activity2? 我编写的方法将一个对象从一个片段发送到 Activity2。但是 Activity2 中的方法只得到一个对象... 或者也许有一种方法可以将数据从片段发送到 Activity2 片段适配器? (这可能是我认为最好的......)

2) 将数据从 Activity2 传递回 Activity1 的最佳方法是覆盖“onBackPressed”并使用 startActivityForResult 和 setResult? (除了 ActionBar 的“后退按钮”之外,我没有按钮来执行此操作)。

谢谢!

【问题讨论】:

  • startActivityForResult 让您有机会处理每一个活动返回。这样,您就不必担心活动返回值混乱。

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


【解决方案1】:

1) 您可以使用 3 个方法创建一个接口,例如:setResult1()setResult2()setResult3(),并让您的 Activity 实现此接口,以便它可以在 3 个 Fragment 可用时立即收集它们的结果。一旦结果发生变化,片段应该在这个接口中调用它们自己的方法,并且在恢复之后(以防重新创建 Activity,比如当你改变方向时)。

2) Activity2 要将结果发送回Activity1,最好的方法是从Activity1 启动Activity2强> 与startActivityForResult()。然后每次 Activity2 收集新结果时,它应该调用setResult(int resultCode, Intent Data)。您可以多次调用它来替换之前的结果。如果立即设置结果,则无需覆盖onBackPressed()

【讨论】:

    【解决方案2】:

    我的建议是创建一个新的类来存储和传递数据,这个类可以被任何活动或片段访问。这个类必须是单例的,所以相同的数据被不同的活动和片段共享。

    public static DataCache instance;
    private UserInfo user;    //here's the data you want to save
    
    private DataCache(Context c){
        this.user=new UserInfo();
    }
    
    public static DataCache getInstance(Context c){
        if(null==instance){
            instance=new DataCache(c);
        }
        return instance;
    }
    
    public void setData(UserInfo data){
        this.user=user;
    }
    
    public UserInfo getData(){
    
        return user;
    }
    

    您可以使用它来保存或从任何活动或片段中获取数据: DataCache.getInstance(context).getData()/saveData(data)

    在这种情况下数据存储在内存中,你可以重写 set 和 get 函数将数据保存到你想要的任何地方,例如 SDCARD 或数据库。

    【讨论】:

      【解决方案3】:

      您可以将所有 3 个片段中的数据存储到共享首选项中,并在活动 1 中获取该数据。检索后应从共享首选项中清除数据。

      【讨论】:

      • 从哪里获取 Activity1 中的数据?是在 onResume 里面吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      相关资源
      最近更新 更多