我正在为我的应用程序开发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'
请建议我如何理清这个问题。
答案 0 :(得分:2)
首先,您需要Gradle依赖项
compile 'com.android.support:appcompat-v7:XX.Y.Z'
对于您拥有的相应SDK XX.Y
版本。
(真的只需要v4库,但v7不应该受伤)
我无法帮助loginButton.setFragment(this)
,因为我不知道它在做什么......但是,您当然需要更改loginButton
类的类参数/导入。
假设您使用的是AppCompatActivity
或FragmentActivity
,则需要使用getActivity().getSupportFragmentManager()
。
个人意见:您应该从片段回调活动以管理FragmentManager(as shown here),而不是使用getActivity()
答案 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,了解如何操作。