Send data from Activity to Fragment already created

前端 未结 3 1681
北荒
北荒 2020-12-19 00:04

I only have found information about how to create a Fragment sending some data to it, but only in its instantiation with the constructor.

But I want to know if it is

相关标签:
3条回答
  • 2020-12-19 00:23

    The easiest way to do this is to define an interface in the Fragment and implement it within the activity. This link should provide a detailed example on how this can be accomplished. https://developer.android.com/training/basics/fragments/communicating.html

    I think the key part you are looking for is here:

    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();
    }
    

    First try to retrieve the fragment by calling findFragmentById(R.id.fragment_id), and if it is not null you can make a call to the method you defined in your interface to send some data to it.

    0 讨论(0)
  • 2020-12-19 00:30

    Just add a method in Fragment which you want to receive arguments, then invoke the method in Activity.

    Activity's Code:



    Fragment's Code:

    0 讨论(0)
  • 2020-12-19 00:30

    You can transfer any data through a bundle like below :

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

    Then in your Fragment, retrieve the data (e.g. in onCreate() method) with:

    Bundle bundle = this.getArguments();
    if (bundle != null) {
            int myInt = bundle.getInt(key, defaultValue);
    }
    
    0 讨论(0)
提交回复
热议问题