2014-11-20 4 views
22

Я получаю сообщение об ошибке в этой части кода:несовместимые типы: HomeFragment не могут быть преобразованы в фрагмент в Android

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

я

error: incompatible types: HomeFragment cannot be converted to 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; 

Независимо от того, что я пытался до сих пор я получаю эту ошибку

Я пробовал много навигации ящика учебники, но ни один из них не похоже на работу.

+1

делает HomeFragment расширяет фрагмент? – Blackbelt

+0

делает 'HomeFragment' расширяет' Fragment'? –

+0

Переход от FragmentActivity к Activity. –

ответ

50

Это, кажется, проблема import.

При использовании getFragmentMangager(), убедитесь, что классы Fragment расширяют класс android.app.Fragment.

Если случайно вы используете android.support.v4.app.Fragment (см вашего импорта), то вам нужно использовать getSupportFragmentManager() вместо

Надеются, что это помогает

+1

Спасибо. Но у меня все еще есть проблема с этой строкой: 'FragmentManager fragmentManager = getSupportFragmentManager();' Он говорит 'Не удается разрешить метод'. – Lior

+3

'getSupportFragmentManager()' работает, если ваша 'Activity' является' FragmentActivity', если это не так, используйте 'getFragmentManager()' – zozelfelfo

+0

Пробовал, но эта строка: 'fragmentManager.beginTransaction(). Replace (R.id. frame_container, фрагмент) .commit(); 'эта проблема:' Ошибка: (191, 52) ошибка: несовместимые типы: android.support.v4.app.Fragment не может быть преобразован в android.app.Fragment'. – Lior

10

Попробуйте изменить

import android.app.Fragment;

в

import android.support.v4.app.Fragment;

Используйте классы из этой библиотеки поддержки для всех других импортных товаров. Также getSupportFragmentManager(), как указано в другом ответе.

2

В вашем HomeFragment классе

заменить:

import android.app.Fragment; 

с:

import android.support.v4.app.Fragment; 
3

В моем случае я изменил линию-1 с прямой 2

Line-1 : import android.app.Fragment;

Линия-2: import android.support.v4.app.Fragment;

Его рабочие

1

использование getSupportFragmentManager() Вместо того getFragmentManager()

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

импорт android.app.Fragment; работает с getFragmentManager() методом, но прежде чем вы должны удалить ввозных android.support.v4.app.Fragment;

0

вы просто должны импортировать android.support. v4.app.Fragment; во всем FragmentClass() ;. вот и все.

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/17192158) – guradio

Смежные вопросы