繁体   English   中英

Android Facebook setFragment与常规Fragment

[英]Android Facebook setFragment with a regular Fragment

因为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”(它是一个片段)放入包中以便在包装构造函数中检索它。

我可以@SuppressLint(“ ValidFragment”),但是我敢肯定有一种更干净的方法可以做到这一点。

最好的方法是只使用应用程序中v4支持库中的Fragment类,签名是相同的,只需要更改import语句即可。

失败的话,另一篇文章中的解决方案可能会起作用(我自己没有尝试过),并且要解决您的问题,只需使用2个构造函数(一个构造函数为默认构造函数,另一个采用Fragment参数),然后使用正确的创建包装对象时的构造函数(即不是默认值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM