期待どおりに実行される単純なアクティビティがあります。
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上にあると確信していますが、見つけるのは簡単ではありません(私にとって)。最小限の例は、他の人々もそれを理解するのに役立つはずです。
最初の場合、getSupportFragmentManager()
を使用する場合は、FragmentActivity
がサポートベースの基本クラスであるため、ActionBarActivity
を拡張するか、FragmentActivity
を拡張する必要があります(FragmentActivityを拡張します)フラグメント。
2番目のケースでは、getSupportFragmentManager()
の代わりにgetFragmentManager()
を使用する必要があります。
フラグメントはハニカムに導入されました。ハニカムの下のフラグメントをサポートするには、サポートライブラリのフラグメントを使用する必要があります。その場合、FragmentActivity
を拡張し、getSupportFragmentManager()
を使用する必要があります。
use getSupportFragmentManager() instead, but this only works for ActionBarActivites.
間違っています。古いデバイスをサポートしているときにFragmentActivityがサポートパッケージに含まれている場合、FragmentActivity
で動作するはずです。その後、activity
、fragment
、fragment managers
などには、サポートパッケージを使用していることを指定するAndroid.support.v4.
が必要です。そうしないとincompatible compile time error.
になります
What am I doing wrong here?
上記で述べたように、サポートパッケージと非サポートパッケージを組み合わせてincompatible compile time error
にします。
kotlin guyzの場合、v4以外に変更する必要はありません
以下を使用して、親である限りアクティビティを取得します
(activity as MainDrawerActivity)
または
((YourActivityName)getActivity());
Javaダイアログで使用する場合:
- import Android.app.FragmentManager;
- FragmentManager fragmentManager;
Kotlinの場合:
- (activity as? YourActivity)?.fragmentManager