Android - getTargetFragment и setTargetFragment - что они использовали для
Я попробовал поиск, но я все еще немного потерял. Я обычно делаю фрагмент для фрагментации связи через Activity
через интерфейсы или BroadcastReceiver
.
Во всяком случае, мой вопрос в том, что такое использование getTargetFragment
? Может ли кто-нибудь предоставить пример использования или просто быстрый пример, чтобы я мог понять его использование?
Ответы
Ответ 1
Использовать case = 2 фрагмента, размещенных в одном и том же действии.
Где startActivityForResult()
устанавливает связь между двумя действиями, setTargetFragment()
определяет отношение вызывающего/вызываемого отношения между двумя фрагментами.
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(),,intent )
Ответ 2
Из того, что я смог отвлечь от чтения документов, было то, что эти методы - это еще один способ доступа к данным из другого фрагмента. Вот образец проекта, который я написал, который демонстрирует один вариант использования этих методов. Я уверен, что есть больше случаев использования, хотя...
Ответ 3
Я наконец узнал, как использовать setTarget в фрагменте и хотел бы поделиться. его весьма полезно, когда вы хотите обмениваться данными с фрагментом на фрагмент.
вот пример: скажем, вы хотели показать диалог, и когда он закрывается, вы хотите сделать какое-то действие.
поэтому в вашем фрагменте1, который будет использовать диалог, вы можете сделать это:
myDialogFragment.setTargetFragment(fragment1, myDialogFragment.REQ_CODE);
и в вашем фрагменте, который вызвал диалог, вам нужно было бы переопределить onActivityResults следующим образом:
@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 может быть любым курсом. Очень полезно для фрагментации фрагментации связи. но я по-прежнему предпочитаю шину событий, как иногда после отправки данных в цель, ее вид может быть уже уничтожен (если его фрагмент), а затем, если вы попытаетесь обновить представление в onActivityResult, вы получите сбой. поэтому я бы сказал, что полезно просто передавать данные, но не обновлять пользовательский интерфейс, если вы не выполнили транзакцию "добавить" фрагмента, а не замену (которая разрушает представление, но сохраняет состояние).