Android: erreur sur le fragment d'interaction Auditeur

J'ai été à la recherche sur stackoverflow pour résoudre mon problème, et trouvé quelque chose de très bon, mais il ne fonctionne pas pour moi ou je suis stupide de le voir (Comment mettre en œuvre OnFragmentInteractionListener)

Je veux placer un fragment à l'intérieur d'un Cadre, de sorte que je l'ai créé et ainsi de suite. Je implenet une interface et de sa méthode. Je (pense), je l'ai fait, mais mon Application se bloque à chaque fois...

*Edit: Mon Application se bloque, quand je l'appelle openHome ou openRecommended, la méthode onCreate fonctionne, j'obtiens ces erreurs, mais tout est être affichés correctement.

C'est mon code:

MainActivity.java

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;


public class MainActivity extends Activity implements HomeFragment.OnFragmentInteractionListener, RecommendedFragment.OnFragmentInteractionListener
{
    FragmentTransaction fragmentTransaction;
    HomeFragment homeFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        homeFragment = new HomeFragment();

        getFragmentManager().beginTransaction().add(R.id.mainFrame, homeFragment).commit();
    }

    protected void openHome(View view)
    {
        /*Intent homeIntent = new Intent(this, HomeFragment.class);
        startActivity(homeIntent);

        homeFragment = new HomeFragment();
        getFragmentManager().beginTransaction().replace(R.id.mainFrame, homeFragment).commit();*/

        System.out.println("Success");
    }

    public void openRecommended(View view)
    {
        Intent recommendedIntent = new Intent(this, RecommendedFragment.class);
        startActivity(recommendedIntent);

        RecommendedFragment recommendedFragment = new RecommendedFragment();
        getFragmentManager().beginTransaction().replace(R.id.mainFrame, recommendedFragment).commit();
    }

    @Override
    public void onFragmentInteractionHome(Uri uri)
    {

    }

    @Override
    public void onFragmentInteractionRecommended(Uri uri)
    {

    }
}

HomeFragment.java

import android.app.Activity;
import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* A simple {@link Fragment} subclass.
* Activities that contain this fragment must implement the
* {@link HomeFragment.OnFragmentInteractionListener} interface
* to handle interaction events.
* Use the {@link HomeFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class HomeFragment extends Fragment
{
private OnFragmentInteractionListener mListener;
public static HomeFragment newInstance()
{
HomeFragment fragment = new HomeFragment();
return fragment;
}
public HomeFragment()
{
//Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
//Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home, container, false);
}
//TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri)
{
if (mListener != null)
{
mListener.onFragmentInteractionHome(uri);
}
}
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
try
{
mListener = (OnFragmentInteractionListener) activity;
}
catch (ClassCastException e)
{
throw new ClassCastException(activity.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach()
{
super.onDetach();
mListener = null;
}
/**
* This interface must be implemented by activities that contain this
* fragment to allow an interaction in this fragment to be communicated
* to the activity and potentially other fragments contained in that
* activity.
* <p/>
* See the Android Training lesson <a href=
* "http://developer.android.com/training/basics/fragments/communicating.html"
* >Communicating with Other Fragments</a> for more information.
*/
public interface OnFragmentInteractionListener
{
//TODO: Update argument type and name
public void onFragmentInteractionHome(Uri uri);
}
}

RecommendedFragment regarde la même chose, à l'exception de certaines méthodes ont un nom différent.

J'ai toujours cette erreur:

java.lang.RuntimeException: Impossible de démarrer l'activité
ComponentInfo{com.domaine.app/com.domaine.app.MainActivity}:
java.lang.ClassCastException: com.domain.app.MainActivity@b1d296b0
doit mettre en œuvre OnFragmentInteractionListener
au android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
au android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
au android.app.ActivityThread.l'accès de 800$(ActivityThread.java:135)
au android.app.ActivityThread$H. handleMessage(ActivityThread.java:1196)
au android.os.Gestionnaire d'.dispatchMessage(Handler.java:102)
au android.os.Looper.boucle(Looper.java:136)
au android.app.ActivityThread.principale(ActivityThread.java:5017)
à java.lang.de réfléchir.La méthode.invokeNative(Native method)
à java.lang.de réfléchir.La méthode.invoke(la Méthode.java:515)
au com.android.interne.os.ZygoteInit$MethodAndArgsCaller.exécuter(ZygoteInit.java:779)
au com.android.interne.os.ZygoteInit.principale(ZygoteInit.java:595)
à dalvik.système.NativeStart.principale(Native method)
Causés par: java.lang.ClassCastException: com.domain.app.MainActivity@b1d296b0 doit mettre en œuvre
OnFragmentInteractionListener
au com.domaine.app.HomeFragment.onAttach(HomeFragment.java:74)
au android.app.FragmentManagerImpl.moveToState(FragmentManager.java:849)
au android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
au android.app.BackStackRecord.exécuter(BackStackRecord.java:684)
au android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
au android.app.De l'activité.performStart(l'Activité.java:5240)
au android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168)
            de android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            de android.app.ActivityThread.l'accès de 800$(ActivityThread.java:135)
            de android.app.ActivityThread$H. handleMessage(ActivityThread.java:1196)
            de android.os.Gestionnaire d'.dispatchMessage(Handler.java:102)
            de android.os.Looper.boucle(Looper.java:136)
            de android.app.ActivityThread.principale(ActivityThread.java:5017)
            à java.lang.de réfléchir.La méthode.invokeNative(Native method)
            à java.lang.de réfléchir.La méthode.invoke(la Méthode.java:515)
            au com.android.interne.os.ZygoteInit$MethodAndArgsCaller.exécuter(ZygoteInit.java:779)
            au com.android.interne.os.ZygoteInit.principale(ZygoteInit.java:595)
            à dalvik.système.NativeStart.principale(Native method)

J'ai vraiment besoin d'aide ici, je suis coincé pendant des heures...

Jean

  • com.domain.app.MainActivity@b1d296b0 doit mettre en œuvre OnFragmentInteractionListener
  • Il n'?! public class MainActivity extends Activité met en œuvre HomeFragment.OnFragmentInteractionListener, RecommendedFragment.OnFragmentInteractionListener Ou je me trompe?
  • Je me demandais si MainActivity doit s'étend FragmentActivity au lieu de Activity...
  • J'ai vérifié ça avant, qu'il ne si vous utilisez supportlibrary, mais si vous n'utilisez pas ces une Activité normale, tout fonctionne bien. C'est dans la réponse à l'une de mes previus question, la seule autre atm ^^
  • Pourriez-vous l'impression que l'id de MainActivity avant d'appeler getFragmentManager().beginTransaction, puis imprimer l'id de activity dans onAttach. Juste pour s'assurer que c'est le même objet.
  • Je ne suis pas vraiment sûr de ce que tu veux dire, mais la partie à l'intérieur de la méthode onCreate travaille, j'ai des erreurs dans le logcat, mais il affiche ce fragment. Quand j'essaie d'appeler openHome ou openRecommended il se bloque...
  • Cette partie n'est pas nécessaire: l'Intention recommendedIntent = new Intent(this, RecommendedFragment.class); startActivity(recommendedIntent); puisque vous ajouter le fragment à droite après.
  • ok, c'est bon à savoir, mais le openHome méthode n'a rien en elle, à l'exception d'un message à la console, mais néanmoins il se bloque, si je la pousse
  • supprimer le code de openHome et openRecommended
  • les deux n'ont pas de code, mais l'application se bloque toujours 🙁
  • L'application ne plante pas lorsque vous appelez les méthodes vides. Vous obtenez toujours ceux ClassCastException erreurs ? Vous êtes en train de dire openRecommended est vide, mais ce n'est pas le cas dans le code ci-dessus. Pourriez-vous mettre à jour de la question avec les nouvelles erreurs que vous obtenez et la mise à jour du code (utiliser pastebin dans le cas où il y en a beaucoup et que vous voulez garder votre question propre) ? merci 😉
  • après j'ai redémarré mon PC et Android Studio, il fonctionne très bien, je n'ai aucune idée de pourquoi 😀 Ouais, pastebin est une excellente idée, merci. Je vais devoir aller au travail maintenant, mais quand je reviens, je vais le tester et voir si cela fonctionne ou pas 🙂 C'est un peu stupide, mais pourriez-vous le taux de cette question, si je reçois assez de rep pour chat au moins? droit maintenant, je ne peut rien faire :/ Ou avez-vous une autre astuce? Répondre aux questions n'est pas si facile pour moi, je l'ai essayé 😀

InformationsquelleAutor JRsz | 2014-09-09