Android: Fehler mit auf fragment-Hörer-Interaktion

Bin ich auf der Suche bei stackoverflow um mein problem zu lösen und etwas gefunden, ziemlich gut, aber es funktioniert bei mir nicht oder ich bin zu dumm um es zu sehen (Wie die Umsetzung OnFragmentInteractionListener)

Möchte ich um ein fragment, in einen Rahmen, so dass ich Sie erstellt habe und so weiter. Ich implenet eine Schnittstelle und seine Methode. Ich (denke) ich es gemacht habe, aber meine App stürzt jedes mal...

*Edit: Meine App stürzt ab, wenn ich Anrufe, openHome oder openRecommended, der onCreate-Methode funktioniert, bekomme ich diese Fehler, aber alles läuft korrekt angezeigt.

Dies ist mein 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 sieht das gleiche, mit Ausnahme einiger Methoden, die einen anderen Namen haben.

Bekomme ich immer diese Fehlermeldung:

java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.domain.app/com.domain.app.MainActivity}:
java.lang.Classcastexception-Fehler: com.domain.app.MainActivity@b1d296b0
umsetzen muss OnFragmentInteractionListener
an android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
an android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
an android.app.ActivityThread.Zugriff auf$800(ActivityThread.java:135)
an android.app.ActivityThread$H. handleMessage(ActivityThread.java:1196)
an android.os.Handler.dispatchMessage(Handler.java:102)
an android.os.Looper.Loops(Looper.java:136)
an android.app.ActivityThread.main(ActivityThread.java:5017)
bei java.lang.reflektieren.Methode.invokeNative(Native-Methode)
bei java.lang.reflektieren.Methode.invoke(Method.java:515)
bei com.android.intern.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
bei com.android.intern.os.ZygoteInit.main(ZygoteInit.java:595)
bei dalvik.system.NativeStart.main(Native-Methode)
Verursacht durch: java.lang.Classcastexception-Fehler: com.domain.app.MainActivity@b1d296b0 umsetzen muss
OnFragmentInteractionListener
bei com.domain.app.HomeFragment.onAttach(HomeFragment.java:74)
an android.app.FragmentManagerImpl.moveToState(FragmentManager.java:849)
an android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
an android.app.BackStackRecord.run(BackStackRecord.java:684)
an android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
an android.app.Aktivität.performStart(Aktivität.java:5240)
an android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168)
            android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            android.app.ActivityThread.Zugriff auf$800(ActivityThread.java:135)
            android.app.ActivityThread$H. handleMessage(ActivityThread.java:1196)
            android.os.Handler.dispatchMessage(Handler.java:102)
            android.os.Looper.Loops(Looper.java:136)
            android.app.ActivityThread.main(ActivityThread.java:5017)
            auf java.lang.reflektieren.Methode.invokeNative(Native-Methode)
            auf java.lang.reflektieren.Methode.invoke(Method.java:515)
            bei com.android.intern.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            bei com.android.intern.os.ZygoteInit.main(ZygoteInit.java:595)
            bei dalvik.system.NativeStart.main(Native-Methode)

Ich brauche wirklich Hilfe hier, ich bin stecken für Stunden...

John

com.domain.app.MainActivity@b1d296b0 umsetzen muss OnFragmentInteractionListener
Es funktioniert?! public class MainActivity extends Activity implements HomeFragment.OnFragmentInteractionListener, RecommendedFragment.OnFragmentInteractionListener Oder bin ich da falsch?
Ich Frage mich, ob MainActivity muss erweitert FragmentActivity statt Activity...
Ich habe überprüft dies vor, es funktioniert, wenn Sie verwenden supportlibrary, aber wenn Sie nicht verwenden diese eine normale Aktivität nur funktionieren. Dies ist in der Antwort auf eine meiner previus Frage, die nur anderen atm ^^
Könnten Sie print-id die id des MainActivity vor dem Aufruf getFragmentManager().beginTransaction und drucken Sie dann die id von activity im onAttach. Nur um sicherzustellen, dass es das gleiche Objekt.

InformationsquelleAutor JRsz | 2014-09-09

Schreibe einen Kommentar