J'ai une activité simple qui se déroule comme prévu.
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
}
}
J'ai ensuite remplacé
import Android.app.FragmentManager;
avec
import Android.support.v4.app.FragmentManager;
afin que je puisse prendre en charge mes appareils plus anciens .. Cependant, cela signale une erreur:
Incompatible types.
Required: Android.support.v4.app.FragmentManager
Found: Android.app.FragmentManager
Qu'est-ce que je fais mal ici?
La solution populaire que j'ai trouvée consiste à utiliser getSupportFragmentManager () à la place, mais cela ne fonctionne que pour ActionBarActivites [edit - voir les réponses] et FragmentActivities.
impossible de convertir Android.app.FragmentManager en Android.support.v4.app.FragmentManager
L'autre solution pertinente suggère d'utiliser FragmentActivity à la place, mais cela semble avoir les mêmes problèmes hérités.
La méthode getFragmentManager () n'est pas définie pour le type 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();
}
}
Je suis presque sûr que la solution à ce problème sera déjà sur SE, mais ce n'est pas facile (pour moi) à trouver. L'exemple minimal devrait également aider d'autres personnes à le comprendre.
Dans votre premier cas, si vous utilisez getSupportFragmentManager()
, vous devez étendre FragmentActivity
ou ActionBarActivity
(étend FragmentActivity), car FragmentActivity
est la classe de base des fragments basés sur le support.
Dans votre deuxième cas, vous devez utiliser getSupportFragmentManager()
au lieu de getFragmentManager()
.
Les fragments ont été introduits en nid d'abeille. Pour prendre en charge les fragments situés en-dessous de nid d'abeilles, vous devez utiliser des fragments de la bibliothèque de support, auquel cas vous devez étendre FragmentActivity
et utiliser getSupportFragmentManager()
.
use getSupportFragmentManager() instead, but this only works for ActionBarActivites.
Faux, cela devrait fonctionner dans votre FragmentActivity
, que FragmentActivity se trouve dans votre package de support. Lorsque vous supportez un ancien appareil, toutes vos importations depuis activity
, fragment
, fragment managers
, etc. doivent avoir Android.support.v4.
pour spécifier que vous utilisez le package de support. sans utiliser ainsi résultera à incompatible compile time error.
What am I doing wrong here?
Vous combinez un package de support avec un package non support dont le résultat est incompatible compile time error
, comme je l’ai dit ci-dessus.
pour Kotlin guyz vous n'avez pas à changer pour ne pas v4
utiliser ci-dessous pour obtenir l'activité aussi longtemps que son parent
(activity as MainDrawerActivity)
ou
((YourActivityName)getActivity());
Pour utilisation dans Java Dialog:
- import Android.app.FragmentManager;
- FragmentManager fragmentManager;
Pour Kotlin:
- (activity as? YourActivity)?.fragmentManager