类型不匹配:无法从android.support.v4.app.Fragment转换为android.app.Fragment

时间:2015-04-10 14:01:46

标签: java android android-support-library

我对Fragment相关类的不同版本有疑问。

在Eclipse中,在Project Properties>中Java构建路径>图书馆,我有:
Android的支持,v4.jar
android-support-v7-appcompart.jar

有几个问题讨论类似的问题,但它们似乎让我更加困惑。 我该如何解决这个问题?

MainActivity.java

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
             ....
        mAdapter = new TabsPagerAdapter(this.getSupportFragmentManager());

        Fragment myFragment = mAdapter.getItem(MY_TAB); // error here

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(resources.getInteger(R.id.pager), myFragment, resources.getString(R.string.my_fragment));
          ...
     }

TabPageAdapter.java

public class TabsPagerAdapter extends FragmentPagerAdapter {

    public TabsPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    @Override
    public Fragment getItem(int index) {
      ...
    }
}

编辑(回复评论)。这就是混乱。

在MainActivity中,我有:

import android.app.Fragment

将其更改为:

import android support.v4.app.Fragment;

导致此错误:
FragmentTransaction类型中的方法add(int,android.app.Fragment,java.lang.String)不适用于参数(int,android.support.v4.app.Fragment,java.lang.String) 在这一行:

fragmentTransaction.add(resources.getInteger(R.id.pager), permitsFragment, resources.getString(R.string.mys_fragment));

更改为使用支持片段管理器会导致此错误:
类型不匹配:无法从android.support.v4.app.FragmentManager转换为android.app.FragmentManager 在这一行:

FragmentManager fragmentManager = getSupportFragmentManager();

因此,如果我将所有导入更改为v4:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

然后我在onTabReselected,onTabSelected,onTabUnselected上得到错误说:
MainActivity类型的onTabUnselected(ActionBar.Tab,FragmentTransaction)方法必须覆盖或实现超类型方法
在ActionBar的v4版本中似乎没有。

2 个答案:

答案 0 :(得分:1)

您应该使用支持包中的组件,也可以不使用。

因此它适用于FragmentManager和Fragment。

答案 1 :(得分:0)

我经常得到这个,最可能的原因是错误的Fragment导入,如果你使用内置的android studio方法创建一个Fragment就会发生这种情况。 (右键单击=> New =>片段或类似的东西)

你一定在做

import android.app.Fragment

将其更改为

import android.support.v4.app.Fragment

然后在处理片段时使用getSupportFragmentManager()