How to pass data between fragments

后端 未结 13 3126
醉话见心
醉话见心 2020-11-22 07:03

Im trying to pass data between two fragmens in my program. Its just a simple string that is stored in the List. The List is made public in fragments A, and when the user cli

13条回答
  •  感动是毒
    2020-11-22 07:30

    So lets say you have Activity AB that controls Frag A and Fragment B. Inside Fragment A you need an interface that Activity AB can implement. In the sample android code, they have:

    private Callbacks mCallbacks = sDummyCallbacks;

    /*A callback interface that all activities containing this fragment must implement. This mechanism allows activities to be notified of item selections. */

    public interface Callbacks {
    /*Callback for when an item has been selected. */    
          public void onItemSelected(String id);
    }
    
    /*A dummy implementation of the {@link Callbacks} interface that does nothing. Used only when this fragment is not attached to an activity. */    
    private static Callbacks sDummyCallbacks = new Callbacks() {
        @Override
        public void onItemSelected(String id) {
        }
    };
    

    The Callback interface is put inside one of your Fragments (let’s say Fragment A). I think the purpose of this Callbacks interface is like a nested class inside Frag A which any Activity can implement. So if Fragment A was a TV, the CallBacks is the TV Remote (interface) that allows Fragment A to be used by Activity AB. I may be wrong about the detail because I'm a noob but I did get my program to work perfectly on all screen sizes and this is what I used.

    So inside Fragment A, we have: (I took this from Android’s Sample programs)

    @Override
    public void onListItemClick(ListView listView, View view, int position, long id) {
    super.onListItemClick(listView, view, position, id);
    // Notify the active callbacks interface (the activity, if the
    // fragment is attached to one) that an item has been selected.
    mCallbacks.onItemSelected(DummyContent.ITEMS.get(position).id);
    //mCallbacks.onItemSelected( PUT YOUR SHIT HERE. int, String, etc.);
    //mCallbacks.onItemSelected (Object);
    }
    

    And inside Activity AB we override the onItemSelected method:

    public class AB extends FragmentActivity implements ItemListFragment.Callbacks {
    //...
    @Override
    //public void onItemSelected (CATCH YOUR SHIT HERE) {
    //public void onItemSelected (Object obj) {
        public void onItemSelected(String id) {
        //Pass Data to Fragment B. For example:
        Bundle arguments = new Bundle();
        arguments.putString(“FragmentB_package”, id);
        FragmentB fragment = new FragmentB();
        fragment.setArguments(arguments);
        getSupportFragmentManager().beginTransaction().replace(R.id.item_detail_container, fragment).commit();
        }
    

    So inside Activity AB, you basically throwing everything into a Bundle and passing it to B. If u are not sure how to use a Bundle, look the class up.

    I am basically going by the sample code that Android provided. The one with the DummyContent stuff. When you make a new Android Application Package, it's the one titled MasterDetailFlow.

提交回复
热议问题