How to implement OnFragmentInteractionListener

后端 未结 12 2506
花落未央
花落未央 2020-11-22 06:25

I have a wizard generated app with navigation drawer in android studio 0.8.2

I have created a fragment and added it with newInstance() and I get this error:

相关标签:
12条回答
  • 2020-11-22 07:19

    Just go to your fragment Activity and remove all method.....instead on on createview method.

    your fragment has only on method oncreateview that's it.

    //only this method implement other method delete

     @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        return rootView;
    }
    

    and make sure your layout it is demo for u.

    0 讨论(0)
  • 2020-11-22 07:20

    With me it worked delete this code:

    @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            if (context instanceof OnFragmentInteractionListener) {
                mListener = (OnFragmentInteractionListener) context;
            } else {
                throw new RuntimeException(context.toString()
                        + " must implement OnFragmentInteractionListener");
            }
        }
    

    Ending like this:

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }
    
    0 讨论(0)
  • 2020-11-22 07:24

    See your auto-generated Fragment created by Android Studio. When you created the new Fragment, Studio stubbed a bunch of code for you. At the bottom of the auto-generated template there is an inner interface definition called OnFragmentInteractionListener. Your Activity needs to implement this interface. This is the recommended pattern for your Fragment to notify your Activity of events so it can then take appropriate action, such as load another Fragment. See this page for details, look for the "Creating event callbacks for the Activity" section: http://developer.android.com/guide/components/fragments.html

    0 讨论(0)
  • 2020-11-22 07:26

    Answers posted here did not help, but the following link did:

    http://developer.android.com/training/basics/fragments/communicating.html

    Define an Interface

    public class HeadlinesFragment extends ListFragment {
        OnHeadlineSelectedListener mCallback;
    
        // Container Activity must implement this interface
        public interface OnHeadlineSelectedListener {
            public void onArticleSelected(int position);
        }
    
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
    
            // This makes sure that the container activity has implemented
            // the callback interface. If not, it throws an exception
            try {
                mCallback = (OnHeadlineSelectedListener) activity;
            } catch (ClassCastException e) {
                throw new ClassCastException(activity.toString()
                        + " must implement OnHeadlineSelectedListener");
            }
        }
    
        ...
    }
    

    For example, the following method in the fragment is called when the user clicks on a list item. The fragment uses the callback interface to deliver the event to the parent activity.

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // Send the event to the host activity
        mCallback.onArticleSelected(position);
    }
    

    Implement the Interface

    For example, the following activity implements the interface from the above example.

    public static class MainActivity extends Activity
            implements HeadlinesFragment.OnHeadlineSelectedListener{
        ...
    
        public void onArticleSelected(int position) {
            // The user selected the headline of an article from the HeadlinesFragment
            // Do something here to display that article
        }
    }
    

    Update for API 23: 8/31/2015

    Overrided method onAttach(Activity activity) is now deprecated in android.app.Fragment, code should be upgraded to onAttach(Context context)

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }
    
    
    @Override
    public void onStart() {
        super.onStart();
        try {
            mListener = (OnFragmentInteractionListener) getActivity();
        } catch (ClassCastException e) {
            throw new ClassCastException(getActivity().toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }
    
    0 讨论(0)
  • 2020-11-22 07:26

    Instead of Activity use context.It works for me.

    @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            try {
                mListener = (OnFragmentInteractionListener) context;
            } catch (ClassCastException e) {
                throw new ClassCastException(context.toString()
                        + " must implement OnFragmentInteractionListener");
            }
    }
    
    0 讨论(0)
  • 2020-11-22 07:29

    OnFragmentInteractionListener is the default implementation for handling fragment to activity communication. This can be implemented based on your needs. Suppose if you need a function in your activity to be executed during a particular action within your fragment, you may make use of this callback method. If you don't need to have this interaction between your hosting activity and fragment, you may remove this implementation.

    In short you should implement the listener in your fragment hosting activity if you need the fragment-activity interaction like this

    public class MainActivity extends Activity implements 
    YourFragment.OnFragmentInteractionListener {..}
    

    and your fragment should have it defined like this

    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
    

    also provide definition for void onFragmentInteraction(Uri uri); in your activity

    or else just remove the listener initialisation from your fragment's onAttach if you dont have any fragment-activity interaction

    0 讨论(0)
提交回复
热议问题