无法从android.support.v4.app.Fragment转换为android.app.Fragment

我正在做我的第一个Android应用程序,并想直接进入ICS API。 到目前为止,我使用ActionBar创build了一个应用程序,使用Viewpager和Fragments的可滑动选项卡。

但是我确实遇到了一些我不断返回的错误。

根据我如何实现它,它总是会回到“types不匹配”错误:“不能从android.support.v4.app.Fragment转换为android.app.Fragment”。 我已经尝试删除所有的导入引用,并且这个错误出现时,我只在TabListener,FragmentActivity和我的两个片段中使用android.support.v4.app.Fragment。

该错误发生在我的TabListener中:

import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.Activity; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; import android.util.Log; public class TabListener implements ActionBar.TabListener { private android.app.Fragment fragment; private Activity activity; private ViewPager pager; private FragmentTransaction ft; public TabListener(Activity activity, Fragment fragment, ViewPager pager) { this.activity = activity; this.fragment = fragment; this.pager = pager; } @Override public void onTabSelected(Tab tab, android.app.FragmentTransaction ft){ if (fragment == null) { ft.add(fragment, null); } else { ft.attach(fragment); } } @Override public void onTabReselected(Tab tab, android.app.FragmentTransaction ft){ // TODO Auto-generated method stub } @Override public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft){ // TODO Auto-generated method stub } } 

通过删除“android.app.FragmentTransaction ft”,将其replace为“FragmentTransaction ft”,问题就变得尴尬了。 然后出现新的问题:

TabListenertypes的onTabReselected(ActionBar.Tab,FragmentTransaction)方法必须覆盖或实现超types方法TabListener.java

TabListenertypes的onTabSelected(ActionBar.Tab,FragmentTransaction)方法必须覆盖或实现超types方法TabListener.java

TabListenertypes的onTabUnselected(ActionBar.Tab,FragmentTransaction)方法必须覆盖或实现超types方法TabListener.java

TabListenertypes必须实现inheritance的抽象方法ActionBar.TabListener.onTabReselected(ActionBar.Tab,FragmentTransaction)TabListener.java

TabListenertypes必须实现inheritance的抽象方法ActionBar.TabListener.onTabSelected(ActionBar.Tab,FragmentTransaction)TabListener.java

TabListenertypes必须实现inheritance的抽象方法ActionBar.TabListener.onTabUnselected(ActionBar.Tab,FragmentTransaction)TabListener.java

这里发生了什么?

你可能明白,我是Java和Android开发的新手。 我觉得我很亲密,但我无法解决这个问题。 我不明白为什么要“从android.support.v4.app.Fragment转换到android.app.Fragment,当我甚至没有任何地方导入android.app.Fragment。

我想这是关于使用兼容性包。 (在为最新版本的SDK创build应用程序时,是否必须使用这个软件包?)

尝试使用getSupportFragmentManager()而不是getFragmentManager()

这里发生了什么?

虽然Android支持包为您提供了向后兼容的Fragment实现,但ActionBar 不是 Android支持包的一部分。 因此, ActionBar.TabListener需要本地API Level 11 Fragment对象。 考虑使用ActionBarSherlock同时拥有一个操作栏和Android支持片段。

但后来我在我的FragmentPagerAdapter留下了另一个问题

Android支持包中的FragmentPagerAdapter有点麻烦 – 它希望API Level 11 Fragment对象,而不是Android Support Fragment对象。 但是,您可以将源代码克隆到FragmentPagerAdapter (源代码位于您的SDK中),并创build自己的使用Fragment和kin的support.v4风格的实现。

我知道现在回答这个问题已经太迟了,但是可能会帮助有同样问题的人。

去你的java文件夹,并点击你的片段的活动。

在导入中,replaceimport android.app.Fragment;

import android.support.v4.app.Fragment;

保持MainActivity中的代码不变,这应该有助于解决问题。

注意:如果它不能立即工作,不要担心。 生成>重build项目

这个解决scheme适用于我

更换

 public class MyFragment extends Fragment{ } 

 public class MyFragment extends android.support.v4.app.Fragment{ } 

也取代import

 import android.app.Fragment; 

 import android.support.v4.app.Fragment; 

您可以删除支持包,这应该可以解决您的问题。 只有当您需要从早期版本的应用程序的Android 3.0及以上的function需要。
在你的情况下,你同时得到ICS的默认碎片和支持包中的碎片,如果碰巧从不同的包中得到对象,它们将不能一起工作。

简洁版本; 您可以使用Honecomb 支持包之上的api级别,而不是两者。

我昨天也有同样的问题。

三星有一个非常好的页面 ,涵盖了ActionBarSherlock。 检查是否使用左侧的一个imports / classes / methods,并将其replace为右侧的imports / classes / methods。

我有同样的问题。 通过改变implements ActionBar.TabListener的接口来解决它, implements TabListener ,然后实现这个接口中的方法。 它还提到了你提到的错误。