【问题标题】:Passing arrayadapter and arraylist between fragments在片段之间传递arrayadapter和arraylist
【发布时间】:2012-12-18 22:37:09
【问题描述】:

我有一个包含两个片段的活动。我想在两个片段之间传递数据(一个 ArrayAdapter 和一个 ArrayList)。 Fragment 1 中的用户操作修改了这两种数据类型,然后需要将其传递到 Fragment 2。同样,Fragment 2 中的用户操作也修改了这两种数据类型,然后需要将它们传递回 Fragment 1。

你能指导一下最优雅的方法吗?我一直在研究parcelable和interface。因为,我对 Java(更不用说 android)没有太多经验,所以我无法辨别两种方法的局限性。

【问题讨论】:

  • 如果你修改了 ArrayAdapter,你也修改了 ArrayList。

标签: android interface android-arrayadapter parcelable


【解决方案1】:

我建议在每个片段中保留对您的数据对象的引用(我相信您是这样)并执行以下操作:

public void onResume()
{
    mDataObject = getFragmentManager.getFragmentByTag("Fragment1").getDataObject1();
    super.onResume();
}

您可以在 Frag 1 和 Frag 2 中运行它,它应该会更新模型。如果您有子对象,则需要比较它们并确定子对象在类似这样的函数中是否不同。

public void determineIfDifferent(DataObject mData1) 
{
    Field mData1Fields[] = mData1.getClass().getFields();
    Field mData2Fields[] = mData2.getClass().getFields();

    for (int i = 0; i < mData1Fields.length; i++)
    {           
        try 
        {
            if (mDataFields[i].get(mData) != null && tempFields[i].get(PS)!= null)
            {
                String mDataValue =  mDataFields[i].get(mData).toString().trim();
                String tempValue =  tempFields[i].get(PS).toString().trim();

                if (!mDataValue.equals(tempValue))
                {   
                    differenceList.add(tempValue);
                }
            }
        }
        catch (IllegalArgumentException e) 
        {
            Logger.logStackTrace(getClass().getSimpleName(), e);
        }
        catch (IllegalAccessException e) 
        {
            Logger.logStackTrace(getClass().getSimpleName(), e);
        }
    }
}

如果类型不是字符串,这显然可以修改 - 这正是我手头的东西

【讨论】:

  • 感谢您的回复。我能够通过在活动类中保存一个对象(如答案 1 中的建议)来完成数据传递,并在需要传递来自片段的数据时使用 getter 和 setter 进行更改。我通过其他问题了解到的另一个重要方面是 getActivity() 始终需要类型转换为活动类名称。根据文档,这样做的原因是许多活动可以具有与子活动相同的片段类。
【解决方案2】:

您可以将它们放入 Intent.putExtra() 中,反之亦然

【讨论】:

  • 我不确定,但意图不是用于活动而不是片段吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多