Подтвердить что ты не робот

Невозможно преобразовать файл android.support.v4.app.Fragment в android.app.Fragment

Я делаю свое первое приложение для Android и хотел бы получить прямо в ICS API. Я до сих пор создал приложение с помощью ActionBar, с помощью проверочных вкладок с помощью Viewpager и Fragments.

У меня есть некоторые ошибки, которые я продолжаю возвращать.

В зависимости от того, как я его реализую, он всегда возвращается к ошибке "Ошибка несоответствия типа": "невозможно преобразовать из android.support.v4.app.Fragment в android.app.Fragment". Я попытался удалить все ссылки на импорт, и эта ошибка появляется, когда я использую только файл android.support.v4.app.Fragment в TabListener, FragmentActivity и моих двух фрагментах.

Ошибка в моем TabListener:

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.util.Log;

public class TabListener implements ActionBar.TabListener {
    private android.app.Fragment fragment;
    private Activity activity;
    private ViewPager pager;
    private FragmentTransaction ft;

    public TabListener(Activity activity, Fragment fragment, ViewPager pager) {
        this.activity = activity;
        this.fragment = fragment;
        this.pager = pager;
    }

    @Override
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft){     
        if (fragment == null) {
            ft.add(fragment, null);
        } else {
            ft.attach(fragment);
        }
    }

    @Override
    public void onTabReselected(Tab tab, android.app.FragmentTransaction ft){
        // TODO Auto-generated method stub
    }

    @Override
    public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft){
        // TODO Auto-generated method stub  
    }
}

Удалив "android.app.FragmentTransaction ft", заменив его просто "FragmentTransaction ft", проблема будет решена. Затем возникают новые проблемы:

Метод onTabReselected (ActionBar.Tab, FragmentTransaction) типа TabListener должен переопределить или реализовать метод супертипа TabListener.java

Метод onTabSelected (ActionBar.Tab, FragmentTransaction) типа TabListener должен переопределить или реализовать метод супертипа TabListener.java

Метод onTabUnselected (ActionBar.Tab, FragmentTransaction) типа TabListener должен переопределить или реализовать метод супертипа TabListener.java

Тип TabListener должен реализовать унаследованный абстрактный метод ActionBar.TabListener.onTabReselected(ActionBar.Tab, FragmentTransaction) TabListener.java

Тип TabListener должен реализовать унаследованный абстрактный метод ActionBar.TabListener.onTabSelected(ActionBar.Tab, FragmentTransaction) TabListener.java

Тип TabListener должен реализовать унаследованный абстрактный метод ActionBar.TabListener.onTabUnselected(ActionBar.Tab, FragmentTransaction) TabListener.java

Что происходит здесь?

Как вы понимаете, я новичок в разработке Java и Android. Я чувствую себя довольно близко, но я не могу решить эту проблему. Я не понимаю, почему он хочет "конвертировать из android.support.v4.app.Fragment в android.app.Fragment, когда я даже не импортирую файл android.app.Fragment в любом месте.

Я предполагаю, что это связано с использованием пакета совместимости. (Должен ли я использовать этот пакет вообще при создании приложения для самой новой версии SDK?)

4b9b3361

Ответ 1

Попробуйте использовать getSupportFragmentManager() вместо getFragmentManager()

Ответ 2

Что происходит здесь?

В то время как пакет поддержки Android предоставляет вам обратную совместимость Fragment, ActionBar не входит в пакет поддержки Android. Следовательно, ActionBar.TabListener ожидает родной API уровня 11 Fragment объектов. Подумайте, используя ActionBarSherlock, чтобы иметь как панель действий, так и фрагменты поддержки Android.

но затем у меня осталась другая проблема в моем FragmentPagerAdapter

FragmentPagerAdapter в пакете поддержки Android немного беспорядочен - он хочет объекты API уровня 11 Fragment, а не объекты поддержки Android Fragment. Тем не менее, вы можете клонировать источник в FragmentPagerAdapter (источник находится в SDK) и создать собственную реализацию, которая использует support.v4 аромат Fragment и kin.

Ответ 3

Я знаю, что было слишком поздно, чтобы ответить на этот вопрос, но это может помочь кому-то с той же проблемой.

Перейдите в папку java и щелкните по активности вашего фрагмента.

В импорте замените import android.app.Fragment; на

import android.support.v4.app.Fragment;

Сохраняйте код в MainActivity неповрежденным, и это должно помочь решить проблему.

Примечание. Если он не работает сразу, не беспокойтесь. Build > Реконструкция проекта.

Ответ 4

Это решение работает для меня

заменить

public class MyFragment extends Fragment{
}

с

public class MyFragment extends android.support.v4.app.Fragment{
}

а также замените импорт

import android.app.Fragment;

с

import android.support.v4.app.Fragment;

Ответ 5

Вы можете удалить пакет поддержки, и это должно решить вашу проблему. Это необходимо только тогда, когда вам нужны функции от Android 3.0 и выше в приложениях для более ранних версий.
В вашем случае вы получаете как фрагменты по умолчанию из ICS, так и фрагменты из пакета поддержки, и если вам удастся получить объекты из разных пакетов, они не будут работать вместе.

Краткая версия; Вы используете либо уровень api выше Honecomb , либо пакет поддержки, а не оба.

Ответ 7

У меня была та же проблема. Решил его, изменив интерфейс от implements ActionBar.TabListener до implements TabListener, а затем внедряя методы внутри этого интерфейса. В нем также упоминается ошибка, о которой вы упомянули.