FragmentActivity: невозможно привести из фрагмента к производному классу - PullRequest
34 голосов
/ 06 марта 2012

Я пытаюсь использовать Фрагмент в FragmentActivity следующим образом:

TutViewerFragment viewer = (TutViewerFragment)    
getSupportFragmentManager().findFragmentById(R.id.tutview_fragment);

А мой TutViewerFragment расширяется Fragment.Однако я получаю сообщение об ошибке:

Невозможно привести от фрагмента к TutViewerFragment.

Я действительно не понимаю, почему это происходит.Почему его нельзя разыграть?

Ответы [ 5 ]

77 голосов
/ 06 марта 2012

Вы расширяете неправильный класс фрагмента. Импорт android.support.v4.app.Fragment вместо android.app.Fragment.

7 голосов
/ 06 марта 2012

Как указано devconsole в комментарии выше: класс, расширяющий Fragment, должен импортировать

android.support.v4.app.Fragment;

, а не

android.app.Fragment;

Я полагаю, он имеетделать с пакетом совместимости Android.Проблема решена!

4 голосов
/ 30 апреля 2018

На всякий случай, если люди ищут эквивалент котлина:

myFragmentClass = supportFragmentManager.findFragmentById(R.id.my_fragment) as MyFindOfFragment
3 голосов
/ 02 января 2016

Как указано devconsole / igor , мы должны убедиться, что класс Fragment, используемый в обоих классах, одинаков. то есть andorid.app.Fragment в обоих

public class WorkoutDetailFragment extends Fragment

и в классе Activity, где мы пытаемся получить ссылку на фрагмент.

WorkoutDetailFragment workoutDetailFragment = (WorkoutDetailFragment)getFragmentManager().findFragmentById(R.id.detail_frag);

Обеспечение того же класса Fragment в обоих файлах разрешит исключение приведения класса.

Надеюсь, это поможет. Я знаю, что немного поздно. Я новичок в Android и изучаю нюансы замечательного языка. Спасибо Stackoverflow за помощь в решении этих мелких проблем.

2 голосов
/ 24 сентября 2018

Если вы получаете это и импортируете android.support.v4.app.Fragment, убедитесь, что вы используете support FragmentManager и Not fragManager.

Котлин:

//DO
import android.support.v4.app.Fragment

myFragment = supportFragmentManager.findFragmentById(R.id.my_fragment) as MyFragment

//DON'T
import android.app.Fragment

myFragment = fragmentManager.findFragmentById(R.id.my_fragment) as MyFragment

Java:

//DO
import android.support.v4.app.Fragment

myFragment =(MyFragment) getSupportFragmentManager().findFragmentById(R.id.my_fragment)

//DON'T
import android.app.Fragment

myFragment = (MyFragment) getFragmentManager().findFragmentById(R.id.my_fragment)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...