Fragment ne peut être converti en Contexte
C'est ma première fois à l'aide de fragments (nouvelle pour android dev) et je suis en train de configurer un spinner. Pour le moment, je suis assez confus sur le contexte et ne semble pas possible de résoudre cette erreur:
Error:(52, 78) error: incompatible types: HotkeysFragment cannot be converted to Context
Voici le code à sa référence:
HotkeysFragment.java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
Spinner hotkey_selector_spinner = (Spinner) rootView.findViewById(R.id.hotkey_selector_spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.hotkey_options, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
hotkey_selector_spinner.setAdapter(adapter);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootViewB = inflater.inflate(R.layout.fragment_hotkeys, container, false);
rootView = rootViewB;
return rootViewB;
}
La ligne spécifique est:
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.hotkey_options, android.R.layout.simple_spinner_item);
Importations:
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import java.util.zip.Inflater;
Comment puis-je résoudre ce problème?
changement
Pourquoi le code dans
Donc, si ça ne devrais pas être dans onCreate devrait être dans onCreateView? Pour le moment l'application est en panne, est-ce la raison?
je suggère de regarder le fragment de la documentation en particulier le cycle de vie de la partie
Ainsi, après un peu de lecture sur le cycle de vie, il semble à l'aide de la
this
à getActivity()
Pourquoi le code dans
onCreate
si son Fragment? Regarder le fragment du cycle de vie et à les mettre en contexte du fragment utilisation getActivity()
. hotkey_selector_spinner
sera nulle conduisant à des NPEDonc, si ça ne devrais pas être dans onCreate devrait être dans onCreateView? Pour le moment l'application est en panne, est-ce la raison?
je suggère de regarder le fragment de la documentation en particulier le cycle de vie de la partie
Ainsi, après un peu de lecture sur le cycle de vie, il semble à l'aide de la
onActivityCreated
serait mieux. Est-ce correct?
OriginalL'auteur mtmeyer | 2015-08-12
Vous devez vous connecter pour publier un commentaire.
À partir de l'Android docs sur des Fragments de ici:
Donc, en plus de la modification du
this
àgetActivity()
, je suggère également que vous travaillez avecgetActivity()
dansonActivityCreated()
(puisque vous avez aussi besoin de la vue à être gonflé en premier)java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
qui je suppose signifie encore retourner nullJ'ai édité ma réponse à prendre en compte le fait que vous avez besoin de l'afficher à être gonflé lors de la création de la carte
Qui a fait le tour, merci pour ça
OriginalL'auteur Andrei Tudor Diaconu
Changement
à
Contexte d'accès dans le fragment en utilisant
getActivity()
Oui il l'est !! !!
OriginalL'auteur M D
Fragment
ne peut pas être converti enContext
, unActivity
peut.Sorte que vous devriez changer
à
OriginalL'auteur Rohit5k2
La façon correcte d'accès
context
à l'intérieur de touteFragment
est à l'aide de lagetActivity()
méthode.Vous pouvez également l'obtenir directement à partir de la
ViewGroup
à l'intérieur deonCreateView
. Si vous allez de cette façon, vous n'obtiendrez pasnull
que vous pourriez obtenir à partir degetActivity()
(aussi longtemps que vous l'instancier pour une vue de l'interface utilisateur avant de).container
peut être null. Il déclare dans la documentationIl retournera seulement les
null
si le fragment, il n'est pas instancié pour une vue de l'interface utilisateur, qui n'a aucun sens puisque vous êtes à l'utiliser pour cette raison.Vous êtes de droite. La plupart du temps, vous ne verrez jamais cette méthode exécutée sans un conteneur. La doc dire que le fragment "peuvent être créés à partir de son état enregistré" avec une valeur null
container
. Je sais que c'est un cas limite, mais il peut néanmoins se produire, rendant le code inutilement fragile. Vous ne savez jamais comment vous pourriez avoir besoin d'utiliser ce fragment dans l'avenir; le fragment de système est plein de bugs comme il est, pas besoin d'avoir encore plus de visibilité.J'ai édité ma réponse pour éviter la confusion.
OriginalL'auteur Machado