web-dev-qa-db-fra.com

types incompatibles: HomeFragment ne peut pas être converti en fragment sous Android

Je reçois une erreur dans cette partie du code:

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");
    }
}

Je reçois

erreur: types incompatibles: HomeFragment ne peut pas être converti en fragment

ce sont les importations:

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;

et voici le titre de la classe:

public class MainActivity extends FragmentActivity {
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;

Peu importe ce que j'ai essayé, j'obtiens toujours cette erreur

J'ai essayé beaucoup de tutoriels sur les tiroirs de navigation, mais aucun ne semble fonctionner.

27
Lior

Cela semble être un problème import.

Lorsque vous utilisez getFragmentMangager(), assurez-vous que vos classes Fragment étendent la classe Android.app.Fragment

Si par hasard vous utilisez Android.support.v4.app.Fragment (voir vos importations), vous devez utiliser plutôt getSupportFragmentManager()

J'espère que ça aide

65
zozelfelfo

Essayez de changer 

import Android.app.Fragment; 

à 

import Android.support.v4.app.Fragment;

Utilisez également les classes de ce support lib pour toutes les autres importations. Aussi getSupportFragmentManager() comme mentionné dans l'autre réponse.

10
ramuta

Dans votre classe HomeFragment 

remplacer: 

import Android.app.Fragment;

avec: 

import Android.support.v4.app.Fragment;
3
Ammar Rajab

Dans mon cas, j'ai changé la ligne 1 avec la ligne 2

Ligne 1: import Android.app.Fragment;

Ligne 2: import Android.support.v4.app.Fragment;

Ça marche

3
Harunduet

utiliser getSupportFragmentManager() au lieu de getFragmentManager()

getSupportFragmentManager()
    .beginTransaction()
    .replace(in.jama.app.R.id.container, new Fragment())
    .commit();
1
saigopi

il vous suffit d'importer Android.support.v4.app.Fragment; dans tous les FragmentClass (); . c'est tout.

1
Mehul Raj

import Android.app.Fragment; fonctionne avec la méthode getFragmentManager() mais avant de devoir supprimer le import Android.support.v4.app.Fragment;

0
Negatu

Si vous utilisez la bibliothèque de support, vous devez veiller à importer Fragment et FragmentManager à partir de la bibliothèque de support. Vous devrez également vous assurer de charger le gestionnaire de fragments de support.

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

    }
}
0
Shripada

Dans Android Studio 2.3, getSupportFragmentManager fonctionne avec Android.support.v4.app mais avec Android Studio 3.1, vous devez utiliser getFragmentManager entrez la description de l'image ici

0
Faizan Khan