我有一個包含兩個片段的活動。我想傳遞兩個片段之間的數據(一個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了。 –