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

}