首先,有人可以为我提供一个样本,只需连接并在登录时切换到另一个片段即可,这样我就可以看到可以理解的工作代码了。
当用户与facebook连接时,我只是试图在测试页面上放置一个Login按钮,然后片段应该改变。我尝试过那里的事情:https://developers.facebook.com/docs/facebook-login/android/v2.3但是我无法让它发挥作用,并且不能真正理解发生了什么......所以我迷失了。我的ExceptionInitializeError
代码如下。但我怀疑这是对的。
我的登录片段:
public View onCreateView(
LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.login_frag, container, false);
loginButton = (LoginButton) view.findViewById(R.id.login_button);
loginButton.setFragment(this);
// Callback registration
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getActivity(),"Success",Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Toast.makeText(getActivity(),"fail",Toast.LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(getActivity(),"error",Toast.LENGTH_SHORT).show();
}
});
return view;
}
MainActivity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
monFragmentManager = new MonFragmentManager(getSupportFragmentManager());
monFragmentManager.showFragment(0, false);
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
monFragmentManager.showFragment(1,false);
}
@Override
public void onCancel() {
monFragmentManager.showFragment(0,false);
}
@Override
public void onError(FacebookException e) {
monFragmentManager.showFragment(0,false);
}
});
}
答案 0 :(得分:1)
要替换片段,您需要获取FragmentManager
的实例。在此实例中,您调用.beginTransaction()
以获取FragmentTransaction
实例。在此事务实例上,您可以调用.replace()
。这需要两个参数:要在其中替换片段的容器的ID,以及要在替换后显示的片段的实例。最后,您需要在事务实例上调用.commit()
以使更改生效。
您可以在onSuccess()
内的匿名内部FacebookCallback<LoginResult>
课程中定义的MainActivity
方法内完成所有这些操作:
// ...
// obtain someFragmentManager instance
// obtain containerViewId instance
// ...
@Override
public void onSuccess(LoginResult loginResult) {
someFragmentManager.beginTransaction()
.replace(containerViewId, otherFragment)
.commit();
}
您可以在this page of the Android docs上看到替换片段的示例。