L'accès getActivity() à l'intérieur de la méthode statique
J'ai cette classe qui appelle la méthode de la valeur de consigne
public class PointsList extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Inflate the layout for this fragment
View view = inflater.inflate(R.layout.listpoints, container, false);
public static class PointCreation extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.point_creation, container, false);
setPoint(view, CREATE);
return view;
}
}
static final void setPoint(View view, int goal) {
final EditText SerialField = (EditText) view.findViewById(R.id.Serial);
if(goal == CREATE) {
Button buttonGuardar = (Button) view.findViewById(R.id.buttonGuardar);
buttonGuardar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String Serial = SerialField.getText().toString();
pointsList.add(new Serial);
//go back to R.layout.listpoints
}
});
}
}
Mon objectif est après que j'ai cliquez sur le bouton pour ajouter la nouvelle Série de la Liste, je peux revenir au menu précédent de
R.layout.point_creation to R.layout.listpoints
Pour déplacer des fragments en général, je utiliser quelque chose comme ceci:
Fragment fragment = new PointsList();
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.commit();
Mais à l'intérieur:
static final void setPoint(View view, int goal)
getActivity().getSupportFragmentManager();
ne peut pas être référencé à partir d'un contexte statique, et je ne sais pas comment aller autour d'elle avec les classes statiques et non statiques? J'ai quelques indicateurs globaux dont je me sers dans les Classes statiques (avoir 2 d'entre eux) que ce serait un peu pénible à l'exportation depuis
public class PointCreation(int something) extends Fragment
est quelque chose que je ne peut pas le faire.
Faites-en votre méthode non-statique, passer d'une Activité ou d'un Contexte ou que ce soit elle a besoin que d'un paramètre, ou avoir un
déjà fait tout ce non statique, il travaille maintenant comme un charme
singleton
instance statique de cache que vous pouvez obtenir en tant que de besoin. Mais n'oubliez pas que vous n'avez pas seulement d'avoir l'objet, vous devez faire appel à elle, c'est la méthode à fait approprié, peut-être à partir d'un thread, etc.déjà fait tout ce non statique, il travaille maintenant comme un charme
OriginalL'auteur heisenberg | 2014-04-10
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir l'activité de la vue:
Si vous utilisez FragmentActivity (cela semble être le cas), alors jetez un Contexte de FragmentActivity (au lieu de l'Activité ordinaire) et plus vous serez en mesure d'appeler getSupportFragmentManager()
vous ne pouvez pas le contexte d'appel de la méthode statique. Il n'a pas d'importance la façon dont vous obtenez ce contexte. Vous ne pouvez pas le faire
Pourquoi je ne peux pas utiliser le contexte de la vue, qui a été transmis à la méthode?
Si vous passer directement à cette méthode, assurez-vous que vous pouvez. Je veux dire que vous ne pouvez pas l'obtenir à partir d'une méthode statique. Toutefois, c'est une bonne pratique pour Utils classes, qui ont simplement des méthodes statiques, parce que vous n'avez pas besoin d'avoir des instances de ces classes. Dans votre cas votre fragment sera créé dans tous les cas. Donc, en utilisant singleton est préférable.
Il m'a aidé ,Merci 🙂
OriginalL'auteur Vladimir Petrakovich
Vous ne pouvez pas faire référence à partir d'une statique à des non-objets statiques. La première chose qui vient à l'esprit est d'utiliser le pattern singleton pour votre fragment. En d'autres mots vous apportent fragment singleton extrait de:
et dans votre fragment
onCreate
méthode de l'attribuer à l'instance:après que vous pouvez supprimer statique modificateur de consigne de la méthode. Et de l'appeler de n'importe quelle partie de votre projet comme
PointsList.getInstance().setPoint();
p.s. quels sont les objectifs de la statique, vous devez utiliser? Vous devez utiliser
static
très soigneusement, beaucoup de choses peuvent être faites par le biais de singleton au lieu d'utiliser la statique.OriginalL'auteur OFFmind
Vous pouvez utiliser par code ci-dessous;
Vous pouvez utiliser
myContext
commeContext
OriginalL'auteur Vishal Vaishnav