2017-07-11 1 views
0

Je veux démarrer l'activité à partir du fragment mais échouer.Start Intent activité de fragment fail - android

Voici mon code

MainActivity myactivity = (MainActivity) getActivity(); 


Intent intent = new Intent(myactivity, PopUpImageActivity.class); 
Bundle extras = new Bundle(); 
myactivity.startMyIntent(intent); 

Répondre

0

Essayez ceci:

startActivity(new Intent(getActivity().getApplicationContext(), YourActivity.class)); 
0

Au lieu de faire la intent de votre activity, pourquoi ne pas faire la intent sur la classe fragment elle-même?

Par exemple,

Intent intent = new Intent(getActivity(), PopUpImageActivity.class); 
getActivity().startActivity(intent); 

Cela devrait fonctionner et il n'y a pas besoin d'accéder à votre activity parce que tous fragment se trouve sur une activity de toute façon et il sait déjà par lui-même qui activity il réside sans l'avoir spécifié

0

La réponse ci-dessus peut/ne peut pas être juste mais pour la meilleure pratique toujours permettre des transactions par le Activité qui enferment le respectifsFragment.

Faire usage de interfaces, onAttach() dans votre Fragment pour donner appel à l'enfermer Activité & de l'activité, permettre une autre transaction activité/fragment.

Un exemple de code ressemblerait à ceci:

public class MyFragmentExample extends Fragment{ 

//Creating instance of Interface 
AnyInterfaceName anyInterfaceName; 


/* 
This onAttach is responsible for attaching the interface 
listener of fragment to Activity 
*/ 
@Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     try { 
      anyInterfaceName = (AnyInterfaceName) context; 
     } catch (ClassCastException ex) { 
      throw new ClassCastException(ex.getMessage() + "must implement AnyInterfaceName"); 
     } 
    } 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return view; 
    } 


// Define an interface with any name 
public interface AnyInterfaceName{ 
    /* 
     you can give any name to this function & this 
     function will be implemented later in activity 
    */ 
    void startAnotherActivity(); 
} 
} 

maintenant du côté d'activité: ajoutez ce sur juste après étend l'activité/AppCompActivity

mettre en œuvre MyFragment.AnyInterfaceName

Ensuite, il suffit de mettre en œuvre la méthode & à l'intérieur de la méthode, autoriser le passage à une autre activité comme vous le faites depuis l'activité en utilisant Intention. N'oubliez pas d'appeler à l'interface dans le fragment pendant que vous voulez démarrer une autre activité. Il suffit de l'appeler comme ceci:

anyInterfaceName.startAnotherActivity();

Cela peut être un travail long à faire, mais pour la meilleure pratique, il est.

Départ du Site officiel Android Communiquer avec l'activitéhere

Hope it helps !!