it-swarm.com.ru

Отправить данные из действия в уже созданный фрагмент

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

Но я хочу знать, возможно ли отправить некоторые данные (например, два объекта Double) во фрагмент из действия без необходимости создания нового экземпляра фрагмента.

Фрагмент, который был ранее создан.

7
sergio

Просто добавьте метод во Fragment, для которого вы хотите получить аргументы, а затем вызовите метод в Activity.

Код деятельности:

 Activity's Code

Код фрагмента:

 Fragment's Code

13
Will Tang

Самый простой способ сделать это - определить интерфейс во фрагменте и внедрить его в упражнение. Эта ссылка должна предоставить подробный пример того, как это можно сделать. https://developer.Android.com/training/basics/fragments/communicating.html

Я думаю, что ключевая часть, которую вы ищете, находится здесь: 

ArticleFragment articleFrag = (ArticleFragment)
      getSupportFragmentManager().findFragmentById(R.id.article_fragment);

if (articleFrag != null) {
    // If article frag is available, we're in two-pane layout...

    // Call a method in the ArticleFragment to update its content
    articleFrag.updateArticleView(position);
} else {
    // Otherwise, we're in the one-pane layout and must swap frags...

    // Create fragment and give it an argument for the selected article
    ArticleFragment newFragment = new ArticleFragment();
    Bundle args = new Bundle();
    args.putInt(ArticleFragment.ARG_POSITION, position);
    newFragment.setArguments(args);

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

    // Replace whatever is in the fragment_container view with this fragment,
    // and add the transaction to the back stack so the user can navigate back
    transaction.replace(R.id.fragment_container, newFragment);
    transaction.addToBackStack(null);

    // Commit the transaction
    transaction.commit();
}

Сначала попытайтесь извлечь фрагмент, вызвав findFragmentById (R.id.fragment_id), и, если он не равен нулю, вы можете вызвать метод, который вы определили в вашем интерфейсе, чтобы отправить ему некоторые данные.

0
Zach Sogolow

Вы можете передавать любые данные через пакет, как показано ниже:

Bundle bundle = new Bundle();
bundle.putInt(key, value);
your_fragment.setArguments(bundle);

Затем в вашем фрагменте извлеките данные (например, в методе onCreate ()) с помощью:

Bundle bundle = this.getArguments();
if (bundle != null) {
        int myInt = bundle.getInt(key, defaultValue);
}
0
Karim