简体   繁体   English

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

[英]Type mismatch: cannot convert from android.support.v4.app.Fragment to android.app.Fragment

I'm having problem with different versions of Fragment related classes. 我在使用Fragment相关类的不同版本时遇到问题。

In Eclipse, in the Project Properties > Java Build Path > Libraries, I have: 在Eclipse中,在项目属性> Java构建路径>库中,我具有:
android-support-v4.jar Android的支持,v4.jar
android-support-v7-appcompart.jar Android的支持-V7-appcompart.jar

There are a few questions discussing similar problems, but they seem to have left me more confused. 有几个问题在讨论类似的问题,但似乎让我更加困惑。 How do I fix this? 我该如何解决?

MainActivity.java 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 TabPageAdapter.java

public class TabsPagerAdapter extends FragmentPagerAdapter {

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

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

Edit (responding to comments). 编辑(响应评论)。 This is the confusion. 这就是混乱。

In MainActivity, I had: 在MainActivity中,我有:

import android.app.Fragment

Changing it to: 更改为:

import android support.v4.app.Fragment;

causes this error: 导致此错误:
The method add(int, android.app.Fragment, java.lang.String) in the type FragmentTransaction is not applicable for the arguments (int, android.support.v4.app.Fragment, java.lang.String) on this line: 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));

Changing to use the support fragment manager causes this error: 更改为使用支持片段管理器会导致以下错误:
Type mismatch: cannot convert from android.support.v4.app.FragmentManager to android.app.FragmentManager on this line: 类型不匹配:无法在此行上从android.support.v4.app.FragmentManager转换为android.app.FragmentManager

FragmentManager fragmentManager = getSupportFragmentManager();

So if I change all imports to v4: 因此,如果我将所有导入更改为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;

then I get errors on onTabReselected, onTabSelected, onTabUnselected saying: 然后我在onTabReselected,onTabSelected,onTabUnselected上看到错误:
The method onTabUnselected(ActionBar.Tab, FragmentTransaction) of type MainActivity must override or implement a supertype method MainActivity类型的onTabUnselected(ActionBar.Tab,FragmentTransaction)方法必须重写或实现一个超类型方法
There doesn't appear to a v4 version of ActionBar. v4版本的ActionBar似乎没有。

You should either use Components from Support package or none. 您应该使用支持包中的组件,也可以不使用任何组件。

So it applies to FragmentManager and Fragment. 因此它适用于FragmentManager和Fragment。

I often get this and the most probable reason is wrong Fragment import which happens if you create a Fragment using the inbuilt android studio method. 我经常收到这个消息,最可能的原因是错误的Fragment导入,如果您使用内置的android studio方法创建片段,则会发生错误。 (Right Click => New => Fragment or something similar) (右键单击=>新建=>片段或类似内容)

You must be doing 你一定在做

import android.app.Fragment

Change that to 更改为

import android.support.v4.app.Fragment

and then use getSupportFragmentManager() whenever dealing with fragments. 然后在处理片段时使用getSupportFragmentManager()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法从android.support.v4.app.Fragment转换为android.app.Fragment - Cannot convert from android.support.v4.app.Fragment to android.app.Fragment 错误:(31,40)错误:不兼容的类型:android.support.v4.app.Fragment无法转换为android.app.Fragment - Error:(31, 40) error: incompatible types: android.support.v4.app.Fragment cannot be converted to android.app.Fragment 在实现FragmentTabHost时将android.support.v4.app.Fragment强制转换为android.app.Fragment的可能性 - Possibility of casting android.support.v4.app.Fragment to android.app.Fragment when implementing a FragmentTabHost 在同一活动中使用android.support.v4.app.Fragment和android.app.Fragment - Use android.support.v4.app.Fragment and android.app.Fragment in same activity 使用backstack时android.app.Fragment和android.support.v4.app.Fragment的不同行为 - Different behavior of android.app.Fragment and android.support.v4.app.Fragment while using backstack 有没有一种方法可以将片段转换为android.support.v4.app.Fragment - Is there a way to convert fragment to android.support.v4.app.Fragment 必需的android.support.v4.app.fragment - required android.support.v4.app.fragment 覆盖 android.support.v4.app.fragment 中已弃用的方法 - Override deprecated method in android.support.v4.app.fragment com.example.main无法转换为android.support.v4.app.Fragment - com.example.main cannot be cast to android.support.v4.app.Fragment 错误的第二个参数类型。 必需:“ android.support.v4.app.Fragment” - wrong 2nd argument type. required: 'android.support.v4.app.Fragment'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM