Надеюсь, я смогу вам помочь.Несмотря на отсутствие документации, вы можете просмотреть исходный код и проверить, как он работает.То, что я мог наблюдать и могу ошибаться, это:
Начиная с упражнения
Activity.startActivityForResult(requestCode) --- > Activity.onActivityResult(requestCode)
Начиная с фрагмента
Fragment.startActivityForResult(requestCode) -> Activity.startActivityForResult(maskedRequestCode) -> |
|
|
Fragment.startActivityForResult(requestCode) <-- Activity.onActivityResult(maskedRequestCode) < - |
Как вы можете видеть, когда вы вызываете Fragment.startActivityForResult
, фрагмент будет вызывать аналогичный метод с хоста Activity
.Однако хост Activity
замаскирует этот requestCode
, чтобы узнать, какой фрагмент вызвал это действие.Таким образом, во время onActivityResult
, Activity
будет снимать маску с этого значения, чтобы доставить результат в соответствующий фрагмент (поскольку действие может содержать несколько фрагментов и т. Д.).
Итак, исходя из этого,Вы должны начать действие и обработать его результат на том же элементе.В противном случае вы не сможете правильно определить requestCode
.Потому что если Fragment
запустил действие, то хостинг будет иметь доступ только к маскированному значению (без копирования кода для снятия маски с этого значения вы не можете определить requestCode
для принятия надлежащих действий).
Помните, что вы можете общаться со своей деятельностью из фрагмента:
class MainActivity {
public void startActivityX() {
startActivityForResult(ACTIVITY_X_REQUEST_CODE);
}
}
class MainFragment {
public void startActivityX() {
((MainActivity)getActivity()).startActivityX();
}
}
Обратное также допустимо. Вы можете получить экземпляр Fragment
, привести к MainFragment
и вызвать методы, которые вынужно.
Как правило, вы должны:
Если старт / результат обрабатывается Activity
, запуск и обработка с помощью Activity
Если запуск / перезапуск будет обрабатываться Fragment
, запустите запуск и обработайте с помощью Fragment
Если запуск / результат распределяется между Fragment
и Activity
, запустите и обработайте его с помощью Activity
.Затем действие вызывает методы на Fragment
.В вашем Fragment
вы можете получить Activity
через getActivity()
.Кроме того, на Activity
вы можете получить ссылку на Fragment
через getFragmentByTag()
Таким образом, можно вызывать методы элемента из другого элемента и наоборот.
ЗДЕСЬ Я также рассказал, как маскируется requestCode
и т. Д. Это может помочь вам.