无法从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
,然后实现这个接口中的方法。 它还提到了你提到的错误。