web-dev-qa-db-ja.com

Android.support.v4.app.FragmentからAndroid.app.Fragmentに変換できません

私は最初のAndroidアプリをやっていて、ICS APIにまっすぐに行きたかった。これまで、スワイプ可能なActionBarを使用してアプリを作成しました。ビューページャーとフラグメントを使用したタブ。

ただし、何度もエラーが発生します。

実装方法によっては、「Android.support.v4.app.FragmentからAndroid.app.Fragmentに変換できません」という「タイプの不一致」エラーに常に戻ります。いずれかのインポート参照をすべて削除しようとしましたが、TabListener、FragmentActivity、および2つのFragmentsでAndroid.support.v4.app.Fragmentのみを使用すると、このエラーが表示されます。

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」に置き換えるだけで、問題はすぐに解決します。その後、新しい問題が発生します。

タイプTabListenerのメソッドonTabReselected(ActionBar.Tab、FragmentTransaction)は、スーパータイプメソッドTabListener.Javaをオーバーライドまたは実装する必要があります

タイプTabListenerのメソッドonTabSelected(ActionBar.Tab、FragmentTransaction)は、スーパータイプメソッドTabListener.Javaをオーバーライドまたは実装する必要があります

タイプTabListenerのメソッドonTabUnselected(ActionBar.Tab、FragmentTransaction)は、スーパータイプメソッド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.app.Fragmentをどこにもインポートしていないのに、なぜAndroid.support.v4.app.FragmentからAndroid.app.Fragmentに変換したいのか理解できません。

互換性パッケージの使用に関連していると思います。 (SDKの最新バージョン用のアプリを作成するときに、このパッケージを使用する必要がありますか?)

44
SLekvak

代わりにgetSupportFragmentManager()を使用してくださいgetFragmentManager()

126
gayavat

何が起きてる?

Androidサポートパッケージは後方互換性のあるFragment実装を提供しますが、ActionBarnotAndroidサポートパッケージ。そのため、ActionBar.TabListenerはネイティブAPIレベル11 Fragmentオブジェクトを想定しています。ActionBarSherlockを使用してアクションバーと= Androidサポートフラグメント。

しかし、FragmentPagerAdapterには別の問題が残っています

AndroidサポートパッケージのFragmentPagerAdapterは少々厄介です-APIレベル11 Fragmentオブジェクトが必要で、AndroidサポートではありませんFragmentオブジェクト。ただし、ソースをFragmentPagerAdapter(ソースはSDKにあります)に複製して、Fragmentおよびkinのsupport.v4フレーバーを使用する独自の実装を作成できます。

14
CommonsWare

この質問に答えるのは遅すぎることは知っていますが、同じ問題を抱えている人を助けるかもしれません。

Javaフォルダーに移動し、フラグメントのアクティビティをクリックします。

インポートで、import Android.app.Fragment;

import Android.support.v4.app.Fragment;

MainActivityのコードをそのままにしておくと、問題の解決に役立ちます。

注:一度に機能しなくても心配する必要はありません。 ビルド>プロジェクトのリビルド

4
4127157

このソリューションは私のために働く

取り替える

public class MyFragment extends Fragment{
}

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

また、インポートを置き換えます

import Android.app.Fragment;

import Android.support.v4.app.Fragment;
4

ここをご覧ください:fragmentTransaction.add(R.id.main_container, new HomeFragment());フラグメントを追加しますが、その後にreplace()メソッドを使用します。したがって、add()の代わりにreplaceを使用する必要があります。

0
X.Fain

昨日も同じ問題がありました。

ActionBarSherlockをカバーする本当に素晴らしい Samsungによるページ があります。左側のインポート/クラス/メソッドのいずれかを使用しているかどうかを確認し、右側のインポート/クラス/メソッドに置き換えます。

0
Lesik2008

同じ問題がありました。インターフェイスをimplements ActionBar.TabListenerからimplements TabListenerに変更して解決し、このインターフェイス内にメソッドを実装します。また、あなたが言及したエラーについても言及しました。

0
RmK

サポートパッケージを削除することで問題を解決できます。以前のバージョンのアプリでAndroid 3.0以上の関数が必要な場合にのみ必要です。
あなたの場合、ICSからデフォルトのフラグメントとサポートパッケージからフラグメントの両方を取得します。異なるパッケージからオブジェクトを取得した場合、それらは連携しません。

短縮版; Honecombより上のapiレベルのいずれかを使用しますまたはサポートパッケージ、両方ではありません。

0
Jave