0

目前我使用的Facebook SDK。我为本应用编写了Facebook登录名,如本官方教程中所述:Facebook Login for Android。这工作正常。这种方法的想法是,您有一个主要的Activity和两个Fragment(登录和欢迎屏幕)。其中一个Fragment被隐藏 - 取决于连接到Facebook的用户是否成功。Facebook登录:登录后显示活动

我想尝试一种不同的方法:我的欢迎屏幕主要是Activity,其中Navigation Drawer(允许我根据用户选择的菜单项取代Fragment)。如果用户未连接到Facebook,则应显示登录屏幕。登录后,即使用户重新启动应用程序,也应显示主要Activity(或更确切地说是Navigation DrawerFragment s之一)。

我可以做什么:如上​​所述,并提供Button这将启动一个新的活动来实现其中两个Fragment教程的例子 - 但是我不希望启动应用程序时,单击总是这么Button

是否有任何教程,或者你有一个想法如何实现该方法,而不实施一个欢迎Fragment这是显示之前,用户可以看到主要Activity

回答

0

好吧,我找到了一个工作解决方案。

此代码确保您将被转发至MainActivity,之后,LoginActivity将从后退堆栈中移除(后退按钮将关闭应用程序)。

Hwoever,还是有一个问题:如果我关闭应用程序,从我Facebook帐户中删除该应用程序,并重新安装它,我会再转发到MainActivity所以我不会被迫再次登录。如果我关闭了应用程序并再次打开,LoginActivity显示正确。

如果我调试这种情况,万物完美的作品。我怎样才能避免这个问题?

public class LoginActivity extends Activity { 

    private boolean isResumed = false; 
    private UiLifecycleHelper uiHelper; 

    private Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 
      onSessionStateChange(session, state, exception); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     uiHelper = new UiLifecycleHelper(this, callback); 
     uiHelper.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_login); 

    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     isResumed = true; 
     Session session = Session.getActiveSession(); 
     if (session != null && (session.isOpened() || session.isClosed())) { 
      onSessionStateChange(session, session.getState(), null); 
     } 
     uiHelper.onResume(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     uiHelper.onPause(); 
     isResumed = false; 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     uiHelper.onActivityResult(requestCode, resultCode, data); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     uiHelper.onDestroy(); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     uiHelper.onSaveInstanceState(outState); 
    } 

    private void onSessionStateChange(Session session, SessionState state, 
      Exception exception) { 
     if (isResumed) { 
      if (session != null && session.isOpened()) { 
       Intent intent = new Intent(LoginActivity.this, 
         MainActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
         | Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(intent); 
       finish(); 
      } 
     } 
    } 

}