如果我在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);
}
}
答案 0 :(得分:2)
您需要在登录按钮上调用setFragment:
btnlogin.setFragment(this);
如果您不执行上述操作,则会在登录期间使用该活动致电startActivityForResult
,这意味着onActivityResult
也会转到您的活动中。如果您设置片段,它将使用片段来调用startActivityForResult
,这意味着onActivityResult
将转到您的片段。