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

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

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

根据我如何实现它,它总是不断回到“类型不匹配”错误:“无法从android.support.v4.app.Fragment转换为android.app.Fragment”。我已尝试删除对任何一个的所有导入引用,并且当我仅使用TabListener,FragmentActivity和我的两个Fractions中的android.support.v4.app.Fragment时,会出现此错误。

该错误发生在我的选项卡管理器中:

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 类型的 TabUnselected(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 创建应用时,我是否必须使用此程序包?


答案 1

尝试改用getSupportFragmentManager()getFragmentManager()


答案 2

这是怎么回事?

虽然 Android 支持包为您提供了向后兼容的实现,但 它不是 Android 支持包的一部分。因此,需要本机 API 级别 11 对象。请考虑使用 ActionBarSherlock 同时具有操作栏和 Android 支持片段。FragmentActionBarActionBar.TabListenerFragment

但是,我的FragmentPagerAdapter中留下了另一个问题

Android Support package 中的内容有点混乱 - 它想要 API Level 11 对象,而不是 Android Support 对象。但是,您可以将源代码克隆到(源代码位于 SDK 中),并创建自己的使用 和 kin 的实现。FragmentPagerAdapterFragmentFragmentFragmentPagerAdaptersupport.v4Fragment


推荐