因为Facebook的setFragment仅与support.fragment一起工作,所以为了在处理常规片段时克服了这个问题,我做了以下工作:
public class NativeFragmentWrapper extends android.support.v4.app.Fragment {
private final Fragment nativeFragment;
public NativeFragmentWrapper(Fragment nativeFragment) {
this.nativeFragment = nativeFragment;
}
@Override
public void startActivityForResult(Intent intent, int requestCode) {
nativeFragment.startActivityForResult(intent, requestCode);
}
@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
nativeFragment.onActivityResult(requestCode, resultCode, data);
}
}
在facebook按钮所在的登录页面中,我执行了以下操作:
authButton.setFragment(new new NativeFragmentWrapper(this));
在Eclipse中,它运行良好,但Android Studio 1.0.2正在抱怨:
此片段应该提供一个默认的构造(公共构造与无参数)。从Fragment文档:每个片段必须有一个空构造函数,因此可以在恢复其活动状态时进行实例化。强烈建议子类没有带参数的其他构造函数,因为在重新实例化片段时不会调用这些构造函数。相反,参数可以由调用者使用setArguments(Bundle)提供,稍后由Fragment使用getArguments()检索。
所以我尝试了这个:
NativeFragmentWrapper f = new NativeFragmentWrapper();
Bundle bundle = new Bundle();
f.setArguments(bundle);
authButton.setFragment(f);
但我没有找到一种方法将“this”(这是一个Fragment)放在bundle中,以便在包装器构造函数中检索它。
我可以@SuppressLint(“ValidFragment”),但我确信有更清洁的方法。
答案 0 :(得分:0)
最好的方法是只使用应用程序中v4支持库中的Fragment类,签名是相同的,您只需要更改import语句。
如果失败了,其他帖子中的解决方案可能会起作用(自己没有尝试过),并且为了解决你的问题,只需要2个构造函数(一个是默认值,另一个是Fragment参数),只是在创建包装器对象时使用正确的构造函数(即非默认值)。