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

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

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

根据我如何实现它,它总是会回到“类型不匹配”错误:“无法从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”,将其替换为“FragmentTransaction ft”,问题就会出现。 然后出现新的问题:

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

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

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

TabListener类型必须实现继承的抽象方法ActionBar.TabListener.onTabReselected(ActionBar.Tab,FragmentTransaction)TabListener.java

TabListener类型必须实现继承的抽象方法ActionBar.TabListener.onTabSelected(ActionBar.Tab,FragmentTransaction)TabListener.java

TabListener类型必须实现继承的抽象方法ActionBar.TabListener.onTabUnselected(ActionBar.Tab,FragmentTransaction)TabListener.java

这里发生了什么?

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

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


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


这里发生了什么?

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

但后来我在FragmentPagerAdapter中遇到了另一个问题

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


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

转到你的java文件夹并点击你的片段的活动。

在导入中,替换import android.app.Fragment;

import android.support.v4.app.Fragment;

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

注意:如果它不能立即工作,请不要担心。 Build>重建项目。

链接地址: http://www.djcxy.com/p/78909.html

上一篇: Cannot convert from android.support.v4.app.Fragment to android.app.Fragment

下一篇: How do I check in JavaScript if a value exists at a certain array index?