2015-08-05 2 views
4

Итак, я просмотрел другие вопросы, и я не смог найти решение. Поэтому в основном у меня есть родительский фрагмент и дочерний фрагмент, и мне нужно передать целое число дочернему фрагменту. Детский фрагмент определен в XML, поэтому я не могу прикрепить пакет, насколько я знаю. Похоже, это должно быть просто, но я не смог понять это.Android: как отправить данные из родительского фрагмента в дочерний фрагмент

Любая помощь в том, как это сделать, была бы замечательной. Благодаря!

+0

Отправка данных через Конструктора –

+0

@quick обучаемого, что не будет работать, когда фрагменты создаются самим Android на изменение конфигурации. –

+0

Проверьте этот ответ, вы поймете связь между фрагментом - фрагментом и активностью - фрагмент, http://stackoverflow.com/questions/24081101/using-localbroadcastmanager-to-communicate-from-fragment-to-activity/24083101# 24083101 –

ответ

5

Простое решение, чтобы получить ссылку на ваш фрагмент ребенка в вашем родительском фрагменте onCreateView

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 

    View view = inflater.inflate(R.layout.parent_fragment, container, false); 
    YourChildFragment fragment = (YourChildFragment) getChildFragmentManager().findFragmentById(R.id.child_fragment_id); 

    // pass your data 
    fragment.setMyInt(42); 

    return view; 
} 
5

Вы можете использовать интерфейс для этого. Создайте интерфейс в родительском фрагменте и создайте его объект и метод getter-setter.

interface YourListner{ 
    void methodToPassData(Object data); 
} 

static YourListner listnerObj; 

public void setListnerObj(YourListner listnerObj) { 
    this.listnerObj = listnerObj; 
} 

Реализуйте его в своем фрагменте ребенка.

Затем добавьте следующий код в родительский фрагмент.

ChilefragmentName yourfrag=((ChilefragmentName) getSupportFragmentManager().findFragmentById(R.id.fragmentId)) 
if(yourfrag !=null) 
    { 
     //Set listner 
     yourfrag.setListnerObj((ChilefragmentName)yourfrag); 

    } 
if(listnerObj!=null) 
    { 
     //Pass your data 
     listnerObj.methodToPassData(data); 

    } 

Вы можете обрабатывать эти данные в реализованном методе у ваших дочерних фрагментов.

+0

Когда, в каком жизненном цикле вы собираетесь вызывать код для 'setListenerObj()' в родительском фрагменте? –

+0

@Bini Что будет mainView точно? – HaHaHAHungry

+0

@HaHaHaHAHungry: Просмотр mainView = inflater.inflate (R.layout.parent_view, \t \t \t \t container, false); Родительский вид макета-> в методе onCreateView. – Beena

1

Если у вас есть какие-то параметры для передачи фрагментам, которые определены через XML, я думаю, что лучший и простой вариант - добавить его динамически. В этом случае вы можете передать два Params, param1 и param2 фрагменту ребенка, как это:

public static YourFragment newInstance(String param1, String param2) { 
     YourFragment fragment = new YourFragment(); 
     Bundle args = new Bundle(); 
     args.putString(ARG_PARAM1, param1); 
     args.putString(ARG_PARAM2, param2); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    public YourFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() != null) { 
      mParam1 = getArguments().getString(ARG_PARAM1); 
      mParam2 = getArguments().getString(ARG_PARAM2); 
     } 
    } 

Метод

newInstance() сохраняет параметры в аргументах расслоении расслоения. Это будет полезно, когда Android воссоздает фрагмент. В этом случае параметры извлекаются в методе onCreate().

+0

Так разве это не сработает, если я создам фрагмент через XML? – HaHaHAHungry

Смежные вопросы