2016-12-11 5 views
-1

Ich habe diese App, wenn in MainActivity (die hier LoginActivity) zuerst mit einem Fragment (LoginFragment), aus Gründen der guten Code ersetzt wird. direkt von mainActivity supportFragment Manager Wenn ein Benutzer anmeldet und will, wird zu einem neuen SignUpFragment umgeleitet:ClassCastException: Fragment kann nicht in Fragment umgewandelt werden

//setting the first fragment in onCreate 
    fragmentManager = getSupportFragmentManager(); 
    LoginFragment fragment = (LoginFragment) fragmentManager.findFragmentById(R.id.activity_main_content); 

    if(fragment == null){ 
     fragment = LoginFragment.newInstance(); 
     fragmentManager.beginTransaction().add(R.id.activity_main_content, fragment).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).commit(); 
    } 

//Opening new registration fragment in LoginFragment.java 
    signUpTextView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      ((LoginActivity)getActivity()).loadSignUpFragment(); 
     } 
    }); 


//In LoginActvity.java 
public void loadSignUpFragment(){ 
    SignUpFragment fragmentSignUp = SignUpFragment.newInstance(); 
    fragmentManager.beginTransaction().replace(R.id.activity_main_content, fragmentSignUp).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).addToBackStack(null).commit(); 
} 

alles gut, auf dem ersten Öffnung arbeitet. Der Versuch, einen neuen Benutzer zu registrieren, arbeitet Aber nach ein paar kleinere Änderungen am Code der Anwendung (wie eine snackbar zeigt, wenn die Anmeldung fehlschlägt), bekam ich diesen Fehler:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.minimalart.studentlife/com.minimalart.studentlife.activities.LoginActivity}: java.lang.ClassCastException: com.minimalart.studentlife.fragments.SignUpFragment cannot be cast to com.minimalart.studentlife.fragments.LoginFragment 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4519) 
        at android.app.ActivityThread.-wrap19(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1483) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6119) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
       Caused by: java.lang.ClassCastException: com.minimalart.studentlife.fragments.SignUpFragment cannot be cast to com.minimalart.studentlife.fragments.LoginFragment 
        at com.minimalart.studentlife.activities.LoginActivity$override.onCreate(LoginActivity.java:38) 
        at com.minimalart.studentlife.activities.LoginActivity$override.access$dispatch(LoginActivity.java) 
        at com.minimalart.studentlife.activities.LoginActivity.onCreate(LoginActivity.java:0) 
        at android.app.Activity.performCreate(Activity.java:6679) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)  
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4519)  
        at android.app.ActivityThread.-wrap19(ActivityThread.java)  
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1483)  
        at android.os.Handler.dispatchMessage(Handler.java:102)  
        at android.os.Looper.loop(Looper.java:154)  
        at android.app.ActivityThread.main(ActivityThread.java:6119)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)  

, warum ich das bekam? ich bin nur von meiner Hauptaktivität Wechsel und Öffnen von Fragmenten

Danke.

alle LoginActivity.java:

package com.minimalart.studentlife.activities; 

import android.support.annotation.NonNull; 
import android.support.design.widget.Snackbar; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v7.app.AppCompatActivity; 

import android.os.Bundle; 

import com.google.android.gms.tasks.OnCompleteListener; 
import com.google.android.gms.tasks.Task; 
import com.google.firebase.auth.AuthResult; 
import com.google.firebase.auth.FirebaseAuth; 
import com.minimalart.studentlife.R; 
import com.minimalart.studentlife.fragments.LoginFragment; 
import com.minimalart.studentlife.fragments.SignUpFragment; 


public class LoginActivity extends AppCompatActivity { 

    private FragmentManager fragmentManager; 
    private FirebaseAuth firebaseAuth; 


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

     firebaseAuth = FirebaseAuth.getInstance(); 
     fragmentManager = getSupportFragmentManager(); 
     LoginFragment fragment = (LoginFragment) fragmentManager.findFragmentById(R.id.activity_main_content); 

     if(fragment == null){ 
      fragment = LoginFragment.newInstance(); 
      fragmentManager.beginTransaction().add(R.id.activity_main_content, fragment).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).commit(); 
     } 

    } 

    public void loadSignUpFragment(){ 
     SignUpFragment fragmentSignUp = SignUpFragment.newInstance(); 
     fragmentManager.beginTransaction().replace(R.id.activity_main_content, fragmentSignUp).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).addToBackStack(null).commit(); 
    } 

    public void signUpNewUser(String email, String pass, String firstName, String secName, String age){ 
     firebaseAuth.createUserWithEmailAndPassword(email, pass).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
       if(task.isSuccessful()){ 

       } 
       else{ 
        Snackbar.make(findViewById(R.id.signUpLinearLayout), task.getException().getLocalizedMessage(), Snackbar.LENGTH_LONG).show(); 
       } 

       // ... 
      } 
     }); 
    } 

    public void logInUser(String email, String pass){ 

    } 

} 
+0

Offensichtlich sind Sie upcasting von Fragment zu LoginFragment, aber das Fragment ist SignUpFragment ... Sie sollten einige OOP Grundlagen lernen ... – Selvin

+0

das Hauptfragment ist LoginFragment, die mit SignUpFragment ersetzt wird. Ich habe das einige Male in anderen Apps gemacht, um das Arbeiten mit Fragmenten zu lernen und ich habe keine Fehler. –

Antwort

0

ich dieses Problem gelöst, fand ich, dass das Problem bei erklärt Hauptfragment

LoginFragment fragment = (LoginFragment)fragmentManager.findFragmentById(R.id.activity_main_content); 

mit

Fragment fragment = fragmentManager.findFragmentById(R.id.activity_main_content); 
ersetzt ist

t hanks @Selvin für deinen Hinweis :)

Verwandte Themen