Je veux juste obtenir actionBar dans un fragment avec une fonction et j'utilise le langage Kotlin et AndroidX.
voici mon code:
import androidx.appcompat.app.ActionBar import androidx.fragment.app.Fragment class TestFragment : Fragment() { fun getActiobar() : ActionBar { return activity.actionBar } }
mais je suis obtenir cette erreur:
Non-concordance de type: le type inféré est android.app.ActionBar! mais androidx.appcompat.app.ActionBar était attendu.
une aide?
3 Réponses :
Vous définissez probablement dans votre vue XML une actionBar qui n'est pas AndroidX.
L'erreur traduite signifie que dans cette fonction, vous souhaitez renvoyer un objet androidx.appcompat.action.ActionBar
mais activity.actionBar
est un android. app.ActionBar!
. Vous devez en tenir compte et le modifier dans les styles correspondants.
J'espère que vous le trouverez utile.
La propriété activity
de androidx.fragment.app.Fragment
vous donne la androidx.fragment.app.FragmentActivity
"ce fragment est actuellement associé à "(cité dans la documentation disponible dans Android Studio)
La propriété actionBar
de FragmentActivity
vous donnera en revanche un android.app. ActionBar
qui n'est pas compatible avec l'ancien android.support.v7.app.ActionBar
ou son équivalent AndroidX androidx.appcompat.app.ActionBar
Étant donné que FragmentActivity
n'a pas de propriété supportActionBar
, vous devrez convertir le FragmentActivity
en androidx.appcompat.app .AppCompatActivity
:
import androidx.appcompat.app.ActionBar import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment class TestFragment: Fragment() { fun getActionbar() : ActionBar? { return (activity as AppCompatActivity).supportActionBar } }
Remarque: j'ai ajouté le "?" car supportActionBar
peut être null
Assurez-vous d'abord d'importer androidx import androidx.appcompat.app.ActionBar;
initial private ActionBar actionBar;
Ensuite, ajoutez ceci dans le protected void onCreate calss
actionBar = getSupportActionBar(); actionBar.setTitle("Your Tittle");
C'est tout.