我遵循了这篇文章中关于如何在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.Fragment
和android.support.v4.app.Fragment
之间的许多混淆
您需要android.support.v4.app.Fragment
作为类型Fragment
的引用变量