Android Studio中的片段类型错误



我遵循了这篇文章中关于如何在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);
}

错误:(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

然后清理重建您的项目。

试试这个。希望有帮助。

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

此外,在活动中导入android.support.v4.app.Fragment而不是android.app.Fragment

欢迎通过Inheritance 使用polymorphism

试着理解,尽管您正在尝试更改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 的引用变量

相关内容

最新更新