2016-12-11 6 views
-1

優れたコードのために、MainActivity(ここではLoginActivity)でフラグメント(LoginFragment)に置き換えたときに、そのアプリケーションを使用しました。 ユーザーがサインアップしたい場合は、mainActivity supportFragmentマネージャから直接新しいSignUpFragmentにリダイレクトされます。ClassCastException:フラグメントをフラグメントにキャストできません

//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(); 
} 

すべての良い、最初の開口部で働いています。私はそれを持って、なぜ

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)  

:(ログインが失敗した場合スナックバーを示すように)いくつかのマイナーコードの変更を適用した後、 作業しかしされ、新しいユーザーを登録しようとすると、私はエラーを得ましたか。 私はメインアクティビティからのみフラグメントを切り替えて開きます

ありがとうございました。

すべて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

明らかに、フラグメントはSignUpFragmentですが、フラグメントはSignUpFragment ... OUPの基本を学ぶ必要があります。 – Selvin

+0

メインフラグメントはSignFpmentで置き換えられるLoginFragmentです。私はフラグメントで作業することを学ぶために、他のアプリでこれを数回しました。エラーはありません。 –

答えて

0

私は、私は、問題が主なフラグメントを宣言

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

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

を置き換えであることが判明し、これを解決しましたtあなたのヒントのための@Selvin :)

関連する問題