Android-getTargetFragment и setTargetFragment-для чего они используются

Я пробовал искать, но я все еще немного потерялся. Я обычно делаю фрагмент к фрагменту связи через Activity через интерфейсы или BroadcastReceiver.

В любом случае, мой вопрос в том, что такое использование getTargetFragment? Может ли кто-нибудь предоставить прецедент или просто быстрый пример, чтобы я мог понять его использование?

3 ответов


Use case = 2 фрагмента, размещенные одним и тем же действием.

здесь startActivityForResult() устанавливает связь между 2 деятельности, setTargetFragment() определяет связь вызывающего/вызываемого между 2 фрагментами.

setTargetFragment (target) позволяет" вызванному " фрагменту знать, куда отправить результат. onActivityResult() в этом случае вызывается вручную.

public class Caller extends Fragment
     Fragment called = Called.newInstance()
     called.setTargetFragment(this)

public class Called extends DialogFragment
   intent = amazingData
   getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intent)

я, наконец, узнал, как использовать setTarget в фрагменте и хотел поделиться. его довольно полезно, когда вы хотите общаться от фрагмента к фрагменту.

вот пример: Допустим, вы хотели показать диалоговое окно и при закрытии вы хотите сделать какое-то действие.

Так что в вашем fragment1, что будет использовать диалоговое окно, вы могли бы сделать это:

myDialogFragment.setTargetFragment(fragment1, myDialogFragment.REQ_CODE);

и в вашем фрагменте, который вызвал диалог, вам нужно будет переопределить onActivityResult как это:

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == CoDDialogFragment.REQ_CODE)
            exit(); //or whatever you want to do here
    }

и в myDialogFragment вы можете сделать следующее:

TellTargetYouGotResults(REQ_CODE);

//...
  private void TellTargetYouGotResults(int code) {
        Fragment targetFragment = getTargetFragment(); // fragment1 in our case
        if (targetFragment != null) {
            targetFragment.onActivityResult(getTargetRequestCode(), code, null);
        }
    }

где REQ_CODE может быть любым int, конечно . Очень полезно для фрагмента к фрагменту связи. но я по-прежнему предпочитаю шину событий, так как иногда после отправки данных в цель ее представление может быть уже уничтожено (в случае его фрагмента), а затем, если вы попытаетесь обновить представление в onActivityResult, вы получите сбой. поэтому я бы сказал, что полезно просто передавать данные, но не обновлять пользовательский интерфейс, если вы сделали транзакцию фрагмента "добавить", а не замену (которая разрушает представление, но сохраняет состояние).


из того, что я смог забрать из чтения документов, было то, что эти методы являются еще одним способом доступа к данным из другого фрагмента. Вот это пример проекта что я написал, что демонстрирует один вариант использования этих методов. Я уверен, что есть больше вариантов использования...