不兼容的类型:HomeFragment无法在Android中转换为Fragment

时间:2014-11-20 10:48:14

标签: java android android-fragments

我在这部分代码中收到错误:

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;

无论我尝试过什么,我仍然会收到此错误

我尝试了很多导航抽屉教程,但似乎都没有。

9 个答案:

答案 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();
        }

    }
}