web-dev-qa-db-ja.com

v4 getFragmentManager with Activity-互換性のないタイプ

期待どおりに実行される単純なアクティビティがあります。

import Android.app.Activity;
import Android.app.FragmentManager;
// import Android.support.v4.app.FragmentManager;
import Android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // FragmentManager fm = getSupportFragmentManager(); // ActionBarActivity
        FragmentManager fm = getFragmentManager(); // Activity
    }
}

私はその後交換しました

import Android.app.FragmentManager;

import Android.support.v4.app.FragmentManager;

古いデバイスをサポートできました。しかし、これはエラーを報告します:

Incompatible types.

    Required: Android.support.v4.app.FragmentManager

    Found: Android.app.FragmentManager

ここで何が間違っていますか?

私が見つけた一般的なソリューションは、代わりにgetSupportFragmentManager()を使用することですが、これはActionBarActivites [編集-回答を参照]およびFragmentActivitiesでのみ機能します。

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

他の関連ソリューションは、代わりにFragmentActivityを使用することを示していますが、これには同じレガシー問題があるようです。

メソッドgetFragmentManager()は、タイプMyActivityに対して未定義です

import Android.support.v4.app.FragmentManager;
import Android.os.Bundle;
import Android.support.v4.app.FragmentActivity;

    public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        // FragmentManager fm = getSupportFragmentManager(); // ActionBarActivity
        FragmentManager fm = getFragmentManager();
    }
}

私はこれに対する解決策がすでにSE上にあると確信していますが、見つけるのは簡単ではありません(私にとって)。最小限の例は、他の人々もそれを理解するのに役立つはずです。

  • 私はAndroidが初めてです。
22
David

最初の場合、getSupportFragmentManager()を使用する場合は、FragmentActivityがサポートベースの基本クラスであるため、ActionBarActivityを拡張するか、FragmentActivityを拡張する必要があります(FragmentActivityを拡張します)フラグメント。

2番目のケースでは、getSupportFragmentManager()の代わりにgetFragmentManager()を使用する必要があります。

フラグメントはハニカムに導入されました。ハニカムの下のフラグメントをサポートするには、サポートライブラリのフラグメントを使用する必要があります。その場合、FragmentActivityを拡張し、getSupportFragmentManager()を使用する必要があります。

52
Raghunandan
use getSupportFragmentManager() instead, but this only works for ActionBarActivites.

間違っています。古いデバイスをサポートしているときにFragmentActivityがサポートパッケージに含まれている場合、FragmentActivityで動作するはずです。その後、activityfragmentfragment managersなどには、サポートパッケージを使用していることを指定するAndroid.support.v4.が必要です。そうしないとincompatible compile time error.になります

What am I doing wrong here?

上記で述べたように、サポートパッケージと非サポートパッケージを組み合わせてincompatible compile time errorにします。

4
Rod_Algonquin

kotlin guyzの場合、v4以外に変更する必要はありません

以下を使用して、親である限りアクティビティを取得します

(activity as MainDrawerActivity)

または

((YourActivityName)getActivity());
1
Goodlife

Javaダイアログで使用する場合:

 - import Android.app.FragmentManager;
 - FragmentManager fragmentManager;

Kotlinの場合:

 - (activity as? YourActivity)?.fragmentManager
0
Maryam Azhdari