2014-03-01 3 views
0

저는 Android 앱을 개발 중이며 Facebook 로그인을 메인 페이지에 통합하고 싶습니다. 저도 같은 이러한 지침에 따라하고 다음 MainActivity 클래스를 변경 연습 목록의Android - 기존 Fragment와 Facebook SDK가 충돌하나요?

https://developers.facebook.com/docs/android/login-with-facebook/#step1

파트 FragmentActivity를 확장 할 수 있습니다. 그러나 MainActivity 클래스는 기본 뷰에서 구현 한 내용 슬라이더 때문에 이미 확장되었습니다. MainActivity의 원래 onCreate 코드는 다음과 같습니다.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Instantiate a ViewPager and a PagerAdapter. 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager()); 
    mPager.setAdapter(mPagerAdapter); 
    mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      invalidateOptionsMenu(); 
     } 
    }); 
} 

그리고이 기능은 훌륭했습니다. 페이스 북 로그인 연습 후, 나는 가능한 한 그대로 방향을 다음과 같은 새로운 'MainFragment'클래스를 추가 :

public class MainFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, 
         Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.main, container, false); 

    return view; 
    } 
} 

은이 잘 표시 할 것 같다 (내 MainActivity 레이아웃에 com.facebook.widget.LoginButton 추가), 및 상기 MainActivity 클래스의 한 OnCreate 섹션에 다음을 추가하여 모두 함께 묶어 시도() 위의 표시하지만,지면 관계 상 자세한 내용은 다시 모든 것을 반복하지 :

if (savedInstanceState == null) { 
     // Add the fragment on initial activity setup 
     mainFragment = new MainFragment(); 
     getSupportFragmentManager() 
       .beginTransaction() 
       .add(android.R.id.content, mainFragment) 
       .commit(); 
    } else { 
     // Or set the fragment from restored state info 
     mainFragment = (MainFragment) getSupportFragmentManager() 
       .findFragmentById(android.R.id.content); 
    } 

을 나는 근본적으로이 문제는 어떻게 기존의 슬라이더와 Facebook 로그인을 멋지게 연출할 수 있습니까? MainActivity의 OnCreate에 필요한 Facebook 코드를 추가하면 슬라이더가 사라집니다. 코드를 추가하지 않으면 Facebook 로그인이 작동하지 않습니다. 나는 뭔가를 잘못하고 있을지도 모른다고 생각하는 단편들에 대해 최대한 많이 읽었지 만 운이별로 없다 ...

미리 도움을 주셔서 감사합니다!

답변

0

문제가 CreateView 메소드의 MainFragment에 있음을 알 수있었습니다. 어떤 이유로이 재정의를 제거하면 내 콘텐츠 슬라이더가 제거되는 문제가 발생하지 않았습니다. 왜 그런지 모르겠지만 다음 줄을 추가하는 대신 LoginButton authButton = (LoginButton) findViewById (R.id.authButton); authButton.setFragment (this); MainFragment의 onViewCreate 메서드에서 MainActivity의 onCreate 메서드로 간단히 옮겼습니다. 원래의 문제가 솔직하게 무엇인지 완전히 모르겠지만 나를 위해 일한 것 같습니다.

0

여기 내 솔루션입니다.이 레벨에서 귀하의 MainActivity을 첫 번째 레벨로 설정하면 Android 앱이 사용자가 로그인했는지 여부를 확인하고 두 번째 레벨 인 Facebook login 페이지로 이동합니다 또는 content slider 구현을 위해, 그것은 다음과 같이 될 것이다 :

MainActivity :

public class LoginFragment extends Fragment { 

private LoginButton authButton; 
private static final String TAG = "MainFragment"; 
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 View onCreateView(LayoutInflater inflater, 
     ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.login_fragment, 
      container, false);   
    authButton=(LoginButton)view.findViewById(R.id.login_button); 
    authButton.setFragment(this); 
    return view; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    uiHelper = new UiLifecycleHelper(getActivity(), callback); 
    uiHelper.onCreate(savedInstanceState); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    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); 
} 

private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
    if (state.isOpened()) { 
     Log.i(TAG, "Logged in..."); 
     startActivity(new Intent(getActivity(), ContentSliderActivity.class)); 
    } else if (state.isClosed()) { 
     Log.i(TAG, "Logged out..."); 
    } 
} 

} 

그리고 여기 당신이 콘텐츠 슬라이더를 가지고 가정 활동이다 : 이것은 LoginFragment입니다

public class MainActivity extends FragmentActivity{ 
     private LoginFragment loginFragment; 

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

     if (savedInstanceState == null) { 
      // Add the fragment on initial activity setup 
      loginFragment = new LoginFragment(); 
      getSupportFragmentManager() 
      .beginTransaction() 
      .add(android.R.id.content, loginFragment) 
      .commit(); 
     } else { 
      // Or set the fragment from restored state info 
      loginFragment = (LoginFragment) getSupportFragmentManager() 
      .findFragmentById(android.R.id.content); 
     } 
    } 


    } 

, 사용자가 성공적으로 로그인 한 후에 표시됩니다. 여기에 전화 번호는 ContentSliderActivity입니다.

public class ContentSliderActivity extends FragmentActivity{ 
     ..................... 
    } 
+0

이에 대한 자세한 답변을 진심으로 감사하지만, 불행히도 내 디자인 요구 사항은 제안한대로 프로젝트를 재 설계 할만큼 충분히 유연하지 않습니다. MainActivity의 일부로 콘텐츠 슬라이더와 페이스 북 로그인 버튼을 함께 사용해야합니다. – someone29926