我在这部分代码中收到错误:
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new HomeFragment();
break;
case 1:
fragment =new FindPeopleFragment();
break;
case 2:
fragment = new PhotosFragment();
break;
case 3:
fragment = new CommunityFragment();
break;
case 4:
fragment = new PagesFragment();
break;
case 5:
fragment = new WhatsHotFragment();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
我得到了
错误:不兼容的类型:HomeFragment无法转换为Fragment
这是导入:
package liorsiag.lgbt;
import android.app.FragmentManager;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
这是班级名称:
public class MainActivity extends FragmentActivity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
无论我尝试过什么,我仍然会收到此错误
我尝试了很多导航抽屉教程,但似乎都没有。
答案 0 :(得分:68)
这似乎是import
问题。
使用getFragmentMangager()
时,请确保您的Fragment
课程延长android.app.Fragment
课程。
如果您使用android.support.v4.app.Fragment
(请参阅导入),则需要使用getSupportFragmentManager()
代替
希望有所帮助
答案 1 :(得分:10)
尝试更改
import android.app.Fragment;
到
import android.support.v4.app.Fragment;
也可以使用该支持库中的类来处理所有其他导入。另外,在另一个答案中提到getSupportFragmentManager()
。
答案 2 :(得分:4)
在HomeFragment
班级
替换:
import android.app.Fragment;
with:
import android.support.v4.app.Fragment;
答案 3 :(得分:3)
在我的情况下,我用第2行更改了第1行
第1行:import android.app.Fragment
;
第2行:import android.support.v4.app.Fragment
;
它的工作
答案 4 :(得分:1)
使用getSupportFragmentManager()
代替getFragmentManager()
getSupportFragmentManager()
.beginTransaction()
.replace(in.jama.app.R.id.container, new Fragment())
.commit();
答案 5 :(得分:1)
你只需导入android.support.v4.app.Fragment;在所有FragmentClass();. 是的。
答案 6 :(得分:0)
导入android.app.Fragment;
适用于getFragmentManager()
方法,但在您必须删除导入android.support.v4.app.Fragment;
答案 7 :(得分:0)
在Android Studio 2.3中,getSupportFragmentManager与android.support.v4.app配合使用但是android studio 3.1你必须使用getFragmentManager enter image description here
答案 8 :(得分:0)
如果使用的是支持库,则应确保从支持库导入Fragment和FragmentManager。您还需要确保加载支持片段管理器。
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
//other imports here...
public class SomeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_some);
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragment_container);
if(fragment == null) {
fragment = new SomeFragment();
fm.beginTransaction().add(R.id.fragment_container, fragment).commit();
}
}
}