【问题标题】:Fragment type error in Android StudioAndroid Studio 中的片段类型错误
【发布时间】:2016-01-13 09:14:28
【问题描述】:

我按照this 发布的关于如何在 Android Studio 中滑动抽屉活动中的片段之间切换的说明进行操作,并且我很肯定我已正确按照显示的步骤进行操作。但是,在我的displayView 方法结束时,编译器抱怨我引用的片段对象与我传​​递给它的方法不兼容。该方法需要android.support.v4.app.Fragment,而我使用的片段对象(显然)是android.app.Fragment。虽然我也知道这是错误的,因为如果我像这样明确定义我的Fragment

android.support.v4.app.Fragment fragment = null;

原始错误已修复,但整个 switch case 中的其余引用开始抱怨同样的原因

Error:(135, 44) error: incompatible types: android.app.Fragment cannot be converted to android.support.v4.app.Fragment

我完全不知道是什么导致了这样的问题,但是我不是使用 Android SDK 的专家;很可能有一些我只是想念的东西。感谢所有反馈和帮助;我正忙于这个应用程序,需要尽快完成它。谢谢!

下面是displayView方法:

public void displayView(int viewId) {

    Fragment fragment = null;
    String title = getString(R.string.app_name);

    switch (viewId) {
        case R.id.nav_newsfeed:
            fragment = new Feed_Fragment();
            title  = "News Feed";

            break;
        case R.id.nav_camera:
            fragment = new Post_Fragment();
            title = "Post a Picture";
            break;
        case R.id.nav_gallery:
            fragment = new Gallery_Fragment();
            title = "Your Posts";

            break;
        case R.id.nav_send:
            fragment = new Message_Fragment();
            title = "Direct Message";

            break;
        /*case R.id.nav_manage:
            //fragment = new Settings_Fragment();
            title = "Account Settings";

            break;
        case R.id.nav_share:
            //fragment = new Share_Fragment();
            title = "Share";

            break;*/

    }
    if (fragment != null) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.content_frame, fragment); //2nd parameter causes issue
        ft.commit();
    }

    // set the toolbar title
    if (getSupportActionBar() != null) {
        getSupportActionBar().setTitle(title);
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);

}

【问题讨论】:

  • 只需将您的 Fragments 类更改为从 android.support.v4.app.Fragment 扩展而不是 android.app.Fragment

标签: java android android-fragments


【解决方案1】:

Error:(135, 44) 错误:不兼容的类型:android.app.Fragment 不能 转成android.support.v4.app.Fragment

您正在使用getSupportFragmentManager

只需导入 android.support.v4.app.Fragment 而不是instead of android.app.Fragment

你应该这样做

import android.app.Fragment

改成

import android.support.v4.app.Fragment

然后清理重建您的项目。

试试这个。希望这会有所帮助。

【讨论】:

  • 谢谢!我的问题是我忘记在我的switchcase 中使用的片段中导入正确的Fragment 类。感谢您的帮助!
【解决方案2】:

您的片段(Feed_Fragment、Post_Fragment、Gallery_Fragment、Message_Fragment...)必须从 android.support.v4.app.Fragment 扩展,而不是 android.app.Fragment

同样在您的活动中导入 android.support.v4.app.Fragment 而不是 android.app.Fragment

【讨论】:

    【解决方案3】:

    欢迎通过Inheritancepolymorphism

    尝试理解虽然你试图改变Fragment,这里是android.support.v4.app.Fragment,你的引用变量也应该来自那个类,现在你的引用变量片段的类型是这里android.app.Fragment。由于您的方法没有获得android.support.v4.app.Fragment 类型的引用变量,因此会显示错误

    由于其中存在冲突,您必须更改 Fragment fragment 以从此处获取课程 android.support.v4.app.Fragment

    当您处理片段时,请确保您从哪里引用它们。因为这是常见的问题。许多人混淆了android.app.Fragmentandroid.support.v4.app.Fragment

    您需要android.support.v4.app.Fragment 用于类型Fragment 的引用变量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-05
      • 2017-12-10
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      相关资源
      最近更新 更多