Actually, if you look at Facebook Docs for Android , you will see that a fragment is used in the login example.
There is a LoginButton widget that provides the Facebook SDK, and it has a setFragment method, and you pass in the target fragment with which you want to use the login function.
In fragment layout
Add the login button that the Facebook SDK provides.
<com.facebook.widget.LoginButton android:id="@+id/facebook_login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp" />
In your fragment
Create the UiLifecycleHelper and StatusCallback objects in your fragment.
private UiLifecycleHelper uiHelper; private Session.StatusCallback callback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { onSessionStateChange(session, state, exception); } };
Add a method to handle user state changes.
private void onSessionStateChange(Session session, SessionState state, Exception exception) { if (state.isOpened()) { Log.i("LoginFragment", "Logged in..."); Log.i("LoginFragment", session.getAccessToken()); doAnythingWithTheFacebookToken(session.getAccessToken()); } else if (state.isClosed()) { // this part is called when user login fails Log.i("LoginFragment", "Logged out..."); } }
Override fragment lifecycle methods
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); uiHelper = new UiLifecycleHelper(getActivity(), callback); uiHelper.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // inflate your fragment view facebookLoginButton = (LoginButton) view.findViewById(R.id.facebook_login_button); facebookLoginButton.setFragment(this); } @Override public void onResume() { super.onResume(); // For scenarios where the main activity is launched and user // session is not null, the session state change notification // may not be triggered. Trigger it if it open/closed. Session session = Session.getActiveSession(); if (session != null && (session.isOpened() || session.isClosed())) { onSessionStateChange(session, session.getState(), null); } uiHelper.onResume(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); uiHelper.onActivityResult(requestCode, resultCode, data); } @Override public void onPause() { super.onPause(); uiHelper.onPause(); } @Override public void onDestroy() { super.onDestroy(); uiHelper.onDestroy(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); uiHelper.onSaveInstanceState(outState); }
Result
Usually you need to override onActivityResult in your activity, but calling setFragment () on the Facebook Login Button allows your snippet to get the result in its own onActivityResult .
If you want to use another button (e.g. your own button):
What is it.