Передача arrayadapter и arraylist между фрагментами

У меня есть задание, состоящее из двух фрагментов. Я хотел бы передать данные (ArrayAdapter и ArrayList) между двумя фрагментами. Пользовательские операции во фрагменте 1 изменяют оба типа данных, которые затем необходимо передать во фрагмент 2. Точно так же пользовательские операции во фрагменте 2 также изменяют два типа данных, которые затем необходимо передать обратно во фрагмент 1.

Не могли бы вы подсказать, как это сделать наиболее элегантно? Я искал посылки и интерфейс. Поскольку у меня нет большого опыта работы с Java (не говоря уже о Android), я не смог различить ограничения двух подходов.


person user1124702    schedule 18.12.2012    source источник
comment
Если вы измените ArrayAdapter, вы также измените ArrayList.   -  person A--C    schedule 19.12.2012


Ответы (2)


Я бы предложил держать ссылку на ваш объект данных в каждом фрагменте (как я уверен, что это так) и сделать что-то вроде следующего:

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);
        }
    }
}

Это, очевидно, можно изменить, если тип не является String - это как раз то, что у меня было под рукой

person chris-tulip    schedule 18.12.2012
comment
Спасибо за ответы. Мне удалось выполнить передачу данных, удерживая объект (как предложено в ответе 1) в классе активности и используя методы получения и установки для внесения изменений, когда необходимо передать данные из фрагментов. Еще один важный аспект, который я узнал из других вопросов, - это то, что getActivity () всегда нужно приводить к типу имени класса активности. Причина этого, согласно документации, заключается в том, что многие действия могут иметь тот же класс фрагмента, что и подактивность. - person user1124702; 26.12.2012

Вы можете поместить их в Intent.putExtra () и наоборот.

person Festus Tamakloe    schedule 18.12.2012
comment
я не уверен, но не используются ли интенты для действий, а не фрагменты? - person Ankit Srivastava; 20.08.2013