我有一个包含两个片段的活动。我想传递两个片段之间的数据(一个ArrayAdapter和一个ArrayList)。在片段1的用户操作同时修改的数据类型,然后需要传递到片段2同样,在Fragement 2用户操作也修改两种数据类型,然后需要传递回片段1在片段之间传递arrayadapter和arraylist
能否请您指导最优雅的方式来做到这一点?我一直在研究parcelable和界面。因为,我没有太多的Java经验(更不用说android),我无法辨别两种方法的局限性。
我有一个包含两个片段的活动。我想传递两个片段之间的数据(一个ArrayAdapter和一个ArrayList)。在片段1的用户操作同时修改的数据类型,然后需要传递到片段2同样,在Fragement 2用户操作也修改两种数据类型,然后需要传递回片段1在片段之间传递arrayadapter和arraylist
能否请您指导最优雅的方式来做到这一点?我一直在研究parcelable和界面。因为,我没有太多的Java经验(更不用说android),我无法辨别两种方法的局限性。
你可以把它们放到Intent.putExtra(),反之亦然
我不确定,但不是意图用于活动而不是碎片? –
我建议在每个片段中保持对数据对象的引用(我敢肯定你是),并完成类似下面的:
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中的建议),并且在需要传递来自片段的数据时使用getters和setter进行更改,我能够完成传递数据。通过其他问题了解到的另一个重要方面是,getActivity()始终需要类型转换为活动类名称。根据文档,这样做的原因是许多活动可以具有与子活动相同的片段类别。 – user1124702
很高兴你得到它:) –
如果修改一个ArrayAdapter,您修改的ArrayList了。 –