如何从;android.app.Fragment“;至;android.support.v4.app.Fragment“;

如何从;android.app.Fragment“;至;android.support.v4.app.Fragment“;,android,android-fragments,Android,Android Fragments,我正在为我的应用程序进行Facebook集成。根据客户要求,我目前在应用程序中使用的所有片段都是 android.app.Fragment。现在,我们为Facebook创建的片段是android.support.v4.app.Fragment。如果我们将其转换为android.app.Fragment,则功能loginButton.setFragment(此)显示错误 我的问题是,我如何从android.app.Fragment移动到 android.support.v4.app.Fragmen

我正在为我的应用程序进行Facebook集成。根据客户要求,我目前在应用程序中使用的所有片段都是
android.app.Fragment
。现在,我们为Facebook创建的片段是
android.support.v4.app.Fragment
。如果我们将其转换为
android.app.Fragment
,则功能
loginButton.setFragment(此)显示错误

我的问题是,我如何从
android.app.Fragment
移动到
android.support.v4.app.Fragment
因为这段代码给出了错误:

getActivity().getFragmentManager()
    .beginTransaction()
    .replace(R.id.content_frame,new MainFragment())
    .addToBackStack(null)
    .commit();
它显示的错误是:

错误的第二个参数类型。发现: 'com.nicklodean.nicklodean.fragment.mainframent',必填项: 'android.app.Fragment'


请建议如何解决此问题。

只需添加这些依赖项即可

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
    compile "com.android.support:appcompat-v7:18.0.+"
}
compile 'com.android.support:appcompat-v7:XX.Y.Z'

首先,您需要在Gradle依赖项中添加

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
    compile "com.android.support:appcompat-v7:18.0.+"
}
compile 'com.android.support:appcompat-v7:XX.Y.Z'
对于您拥有的相应SDK
XX.Y
版本

(真的只需要v4库,但v7不应该有问题)


我无法帮助您使用
loginButton.setFragment(this)
,因为我不知道它在做什么。。。但是,您当然需要更改
loginButton
类的class参数/import

假设您使用的是
AppCompatActivity
FragmentActivity
,则需要使用
getActivity().getSupportFragmentManager()

个人意见:您应该从片段中回调活动以管理FragmentManager(),而不是使用
getActivity()

直接从片段类中提取它,我希望这会有所帮助

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    Fragment oldFragment = getSupportFragmentManager().findFragmentByTag(YOUR_FRAGMENT_TAG);
    if (oldFragment == null) {
        ft.add(yourfragment,YOUR_FRAGMENT_TAG);
        ft.commitAllowingStateLoss();
    } else if (!oldFragment.isAdded()) {
        ft.remove(oldFragment);
        ft.add(yourfragment,YOUR_FRAGMENT_TAG);
        ft.commitAllowingStateLoss();
    }
您只需将
android.support.v4.app.FragmentManager
用于任何
android.support.v4.app.Fragment
,将
android.app.FragmentManager
用于任何
android.app.Fragment
。这是没有办法的


如果您需要同时使用
片段
类的两个版本(在单个
活动
中),则必须分别管理每个
片段管理器
中的片段。请查看以了解如何执行此操作。

要使用getActivity().getSupportFragmentManager(),我需要将我的app.fragment更改为android.support.v4.app.fragment,我无法执行此操作,因为它超出了要求,那么您的要求与代码冲突。你问过如何使用v4片段,这就是你如何做到的为什么是版本18?而
v7
包含
v4
,所以只需要第二个oneNot帮助,因为我必须使用“getSupportFragmentManager()”才能使用“import android.support.v4.app.Fragment”。我不能这样做,因为我必须在这里使用“android.app.Fragment”。请尝试将android.support.v4.app放在声明片段之前:android.support.v4.app.Fragment=getSupportFragmentManager().findfFragmentByTag(您的片段标记);同样在FragmentTransaction之前,但android.support.v4.app:android.support.v4.app.FragmentTransaction ft=getSupportFragmentManager().beginTransaction();