Подтвердить что ты не робот

Android - getTargetFragment и setTargetFragment - что они использовали для

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

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

4b9b3361

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