Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Facebook setFragment与常规片段_Java_Android_Facebook_Android Fragments - Fatal编程技术网

Java Android Facebook setFragment与常规片段

Java Android Facebook setFragment与常规片段,java,android,facebook,android-fragments,Java,Android,Facebook,Android Fragments,由于Facebook的setFragment仅与support.fragment一起使用,因此在使用常规fragment时,为了克服这一问题,我采取了以下措施: public class NativeFragmentWrapper extends android.support.v4.app.Fragment { private final Fragment nativeFragment; public NativeFragmentWrapper(Fragment native

由于Facebook的setFragment仅与support.fragment一起使用,因此在使用常规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却在抱怨:

这个片段应该提供一个默认构造函数(一个没有参数的公共构造函数)。根据片段文档:每个片段都必须有一个空构造函数,以便在恢复其活动状态时可以实例化它。强烈建议子类不要有其他带参数的构造函数,因为当片段被重新实例化时,不会调用这些构造函数;相反,参数可以由调用方使用setArguments(Bundle)提供,然后由片段使用getArguments()检索

所以我试了一下:

NativeFragmentWrapper f = new NativeFragmentWrapper();
Bundle bundle = new Bundle();
f.setArguments(bundle);
authButton.setFragment(f);
但是我没有找到一种方法将“this”(这是一个片段)放入bundle中,以便在包装构造函数中检索它


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

最好的方法是在应用程序中使用v4支持库中的Fragment类,签名是相同的,您只需要更改导入语句


如果做不到这一点,另一篇文章中的解决方案可能会起作用(我自己还没有尝试过),为了解决您的问题,只需使用两个构造函数(一个是默认的,另一个是采用片段参数的),并且只需使用正确的构造函数(即不是默认的)当您创建包装器对象时。

也许您认为它在eclipse中工作得很好,但由于内存原因,当活动被破坏和重新创建时,您没有看到崩溃。我只想将facebook代码更改为使用本机片段。实际上这只是一个小小的改变,但Facebook将更新他们的sdk,我需要重新做,直到他们完全改变一些东西,我会陷入困境。在我的测试中,我从来没有看到过问题,可能是我从来没有遇到过有问题的场景,但如果这是一个真正的极端情况,我会在相关的时候处理它。老实说,你试图做的事情似乎根本不可能行得通。您正在扩展片段,但永远不要调用本机片段-onCreate、onCreateView等。不在那里。你删除了一些代码吗?没有,我是从这里开始的:-也许它在我还没有遇到的特定场景中不起作用,但现在,我只想完成将我的项目迁移到Android Studio的工作,因为在eclipse中我没有收到任何警告/错误。谢谢,但我想知道如何解决这个小问题:)我从那开始,但后来遇到了另一个问题,使我切换到常规片段。即使我添加了一个没有参数的新构造函数,仍然会出现错误。一句话:我如何将一个片段放在一个包中,再放到另一个片段中?那会解决我的问题