2012-03-06 19 views
31

に断片からキャストすることはできません、私はそうのようなFragmentActivityでフラグメントを使用しようとしています:FragmentActivity:派生クラス

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

そして、私のTutViewerFragmentFragmentを拡張します。しかし、私はエラーが発生しています:

Cannot cast from Fragment to TutViewerFragment.

私は本当になぜこれが起こっているのか分かりません。なぜそれは投げられないのですか?

+1

TutViewerFragmentがFragmentを拡張していますか? –

+0

私は肯定的です。見てください:http://pastie.org/3534066 –

+0

xml 要素を貼り付けることはできますか?また、どのような互換性パッケージを使用していますか? – Sid

答えて

70

間違ったFragmentクラスを拡張しています。 android.app.Fragmentの代わりにandroid.support.v4.app.Fragmentをインポートしてください。

+13

または、「getSupportFragmentManager'の代わりに 'getFragmentManager'を呼び出す。 – theblang

+0

ありがとう@mattblangあなたは違いについても詳しく教えてください。 – Mayank

+0

'getFragmentManager'はネイティブのFragmentを返しますが、' getSupportFragmentManager'はサポートFragmentを返します。 'getSupportFragmentManager'は、既存のメソッドの戻り値の型を変更できないため、サポートライブラリの一部または追加です。 – devconsole

6

devconsoleは、上記のコメントで指摘したように:私はそれがAndroidの互換パッケージに関係していると思います

android.support.v4.app.Fragment; 

なく

android.app.Fragment; 

をインポートする必要があるフラグメントを拡張するクラス。問題は解決しました!

3

devconsole/igorが指定されているため、両方のクラスで使用されるFragmentクラスが同じであることを確認する必要があります。両方

public class WorkoutDetailFragment extends Fragment 

で、我々はフラグメントの参照を取得しようとするActivityクラスで すなわちandorid.app.Fragment。

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

両方のファイルで同じFragmentクラスを保証すると、クラスキャスト例外が解決されます。

これが役に立ちます。私は少し遅れを知っている。私はAndroidには新しく、素晴らしい言語のニュアンスを探っています。これらの小さな問題を解決するのを手伝ってくれたStackoverflowに感謝します。