通过在Facebook SDK 3.20.0中添加Fragment over Activity无法登录Facebook?

时间:2015-03-09 09:59:53

标签: android facebook

如果我在MainActivity中编写登录代码而不是在其上加载片段,我就能登录到facebook。将MainFragment添加到MainActivity时,我无法登录。

以下是MainActivity -

public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);

    getSupportFragmentManager()
    .beginTransaction()
    .add(android.R.id.content, new MainFragment())
    .commit();

    }

}

以下是MainFragment -

public class MainFragment extends Fragment{

private LoginButton btnlogin; 
private UiLifecycleHelper uiHelper;
private TextView txtUserName;


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

    Log.e("Frag", "oncreate called...");

    uiHelper = new UiLifecycleHelper(getActivity(), statusCallback);
    uiHelper.onCreate(savedInstanceState);

}


@Override
public View onCreateView(LayoutInflater inflater,
        @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    Log.e("Frag", "oncreateView called...");

    View v = inflater.inflate(R.layout.new_activity_layout, null);
    txtUserName = (TextView) v.findViewById(R.id.txtUserName);
    btnlogin = (LoginButton) v.findViewById(R.id.btnlogin);

    btnlogin.setReadPermissions(Arrays.asList("email"));

    btnlogin.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() {

        @Override
        public void onUserInfoFetched(GraphUser user) {
            if (user != null) {
                txtUserName.setText("welcome " + user.getName());
            } else {
                txtUserName.setText("not logged in.");
            }
        }
    });

    return v;
}


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

        Log.e("Frag", "statusCallback called...");

        if (state.isOpened()) {
            Log.d("MainActivity", "Facebook session opened.");
        } else if (state.isClosed()) {
            Log.d("MainActivity", "Facebook session closed.");
        }
    }
};


@Override
public void onResume() {
    super.onResume();
    Log.e("Frag", "onResume called...");
    uiHelper.onResume();
}

@Override
public void onPause() {
    super.onPause();
    Log.e("Frag", "onPause called...");
    uiHelper.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.e("Frag", "onDestroy called...");
    uiHelper.onDestroy();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.e("Frag", "onActivityResult called...");
    uiHelper.onActivityResult(requestCode, resultCode, data);


}

@Override
public void onSaveInstanceState(Bundle savedState) {
    super.onSaveInstanceState(savedState);
    Log.e("Frag", "onSavedInstance called...");
    uiHelper.onSaveInstanceState(savedState);
}
}

1 个答案:

答案 0 :(得分:2)

您需要在登录按钮上调用setFragment:

btnlogin.setFragment(this);

如果您不执行上述操作,则会在登录期间使用该活动致电startActivityForResult,这意味着onActivityResult也会转到您的活动中。如果您设置片段,它将使用片段来调用startActivityForResult,这意味着onActivityResult将转到您的片段。