如何从" android.app.Fragment" to" android.support.v4.app.Fragment"

时间:2016-11-08 19:58:54

标签: android android-fragments

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

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

getActivity().getFragmentManager()
    .beginTransaction()
    .replace(R.id.content_frame,new MainFragment())
    .addToBackStack(null)
    .commit();

它显示的错误是:

  

错误的第二个参数类型。实测:   ' com.nicklodean.nicklodean.fragment.MainFragment',必填:   ' android.app.Fragment'

请建议我如何理清这个问题。

4 个答案:

答案 0 :(得分:2)

首先,您需要Gradle依赖项

compile 'com.android.support:appcompat-v7:XX.Y.Z'

对于您拥有的相应SDK XX.Y版本。

(真的只需要v4库,但v7不应该受伤)

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

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

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

直接从Fragment类中提取它

答案 1 :(得分:0)

只需添加这些依赖项

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

答案 2 :(得分:0)

我希望这会有所帮助

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();
    }

答案 3 :(得分:0)

您只需必须android.support.v4.app.FragmentManager与任何android.support.v4.app.Fragment一起使用,将android.app.FragmentManager与任何android.app.Fragment一起使用。没有办法解决这个问题。

如果您需要同时使用Fragment类的两个版本(在单个Activity中),则必须分别管理每个FragmentManager内的片段。看看this answer,了解如何操作。