2014-10-30 5 views
0

У меня есть Fragment с кнопкой «выбрать год». Эта кнопка добавляет ListFragment в заднюю часть, где пользователь может выбрать год. Один раз в год, я хочу избавиться от ListFragment и вернуться к первому фрагменту. Каков наилучший способ обновить первый фрагмент, с данными, которые были выбраны в ListFragment?Каков правильный способ отправки данных из одного фрагмента в другой?

TL; DR: Fragment1 открывает Fragment2, пользователь выбирает опцию в Fragment2. Как обновить Fragment1 этими данными?

Мое текущее решение - это открытый класс со статическими элементами, но мне интересно, имеет ли способ Android лучший способ.

+1

На самом деле пучок не работал бы потому, что onCreateView первого фрагмента не будет вызвано, поскольку представление уже создано. Я думаю, его лучший выбор - это интерфейс. – jvrodrigues

+1

http://developer.android.com/training/basics/fragments/communicating.html – Squonk

ответ

6

Обмен данными между фрагментами и фрагментами осуществляется через связанную с ним деятельность . Два фрагмента никогда не должны связываться напрямую. [Source]

Определите интерфейс в Fragment2 и реализуйте этот интерфейс в основной деятельности. Когда вы вызываете метод интерфейса из Fragment2, вы можете получить доступ к Fragment1 из метода интерфейса в Activity и передать соответствующие данные в Fragment1 через его общедоступные методы.

Создание интерфейса:

public class Fragment2 extends ListFragment { 
    OnItemSelectedListener mCallback; 

    public interface OnItemSelectedListener { 
     public void onItemSelected(int position); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      mCallback = (OnItemSelectedListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement OnItemSelectedListener"); 
     } 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     mCallback.onItemSelected(position); 
    } 
} 

Добавить implements Fragment2.OnItemSelectedListener к вашему определению деятельности и определить onItemSelected метод:

public void onItemSelected(int position) { 
    Fragment1 fragment = (Fragment1) 
      getSupportFragmentManager().findFragmentById(R.id.fragment1); 

    if (fragment != null) { 
     fragment.updateValue(position); 
    } 
} 
+0

Это имеет смысл. Благодаря! – BLuFeNiX

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