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, вы получите сбой. поэтому я бы сказал, что полезно просто передавать данные, но не обновлять пользовательский интерфейс, если вы сделали транзакцию фрагмента "добавить", а не замену (которая разрушает представление, но сохраняет состояние).
из того, что я смог забрать из чтения документов, было то, что эти методы являются еще одним способом доступа к данным из другого фрагмента. Вот это пример проекта что я написал, что демонстрирует один вариант использования этих методов. Я уверен, что есть больше вариантов использования...