2016-11-27 12 views
0

クラスをFragmentから動的に変更できるようにしようとしました。最初にLoginFragmentが開きます。ユーザーにアカウントがない場合、新しいアカウントを登録することができます。ログインと登録は、1つのアクティビティーで2つの異なるフラグメントになります。新しいフラグメントの開始後にアクティビティがクラッシュしました

はここStartAcitivity.class

public class StartActivity extends AppCompatActivity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_start); 

     if (savedInstanceState == null) { 
      getSupportFragmentManager() 
        .beginTransaction() 
        .add(R.id.flDetailContainer, new LoginFragment(), "LOGIN") 
        .commit(); 
     } 
    } 
} 

マイLoginFragment.class

public class LoginFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_login, parent, false); 
    } 
} 

そしてactivity_start.xmlレイアウトだ

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/flDetailContainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

</FrameLayout> 

マイfragment_login.xmlレイアウト

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" android:layout_height="match_parent" 
       android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextView" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

</LinearLayout> 

エラーが発生しました。

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.asus.carclubapps, PID: 2748 
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.asus.carclubapps/com.example.asus.carclubapps.StartActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f0c006f (com.example.asus.carclubapps:id/activity_start) for fragment RegistrationFragment{85ef24b #0 id=0x7f0c006f} 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
         at android.app.ActivityThread.-wrap11(ActivityThread.java) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:148) 
         at android.app.ActivityThread.main(ActivityThread.java:5417) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
        Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f0c006f (com.example.asus.carclubapps:id/activity_start) for fragment RegistrationFragment{85ef24b #0 id=0x7f0c006f} 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1098) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286) 
         at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758) 
         at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671) 
         at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) 
         at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:619) 
         at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237) 
         at android.app.Activity.performStart(Activity.java:6253) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
         at android.app.ActivityThread.-wrap11(ActivityThread.java)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:148)  
         at android.app.ActivityThread.main(ActivityThread.java:5417)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

私はRegistrationFragmentとfragment_registrationを持っていますが、事は私だけまだRegistrationFragmentないLoginFragmentを呼ぶ私のStartActivityです。私はここに何かを逃していますか


RegistrationFragment

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

/** 
* Created by Asus on 11/27/2016. 
*/ 

public class RegistrationFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_registration, parent, false); 
    } 
} 

fragment_registration

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
    <TextView 
     android:gravity="center_horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/title_registration"/> 

</LinearLayout> 
+1

プロジェクトをクリーンにして再ビルドしてからもう一度実行してください。他のフラグメント名があります。RegistrationFragment – Nithinlal

+0

あなたの質問に 'RegistrationFragment'を追加してください。 –

+0

Fromは、あなたのRegistrationFragmentにそのクリアを記録します。実際には、添付されたフラグメントのレイアウトファイルには存在しないビューにアクセスしようとしています。 正しいビューを添付していることをRegistrationFragmentで確認してください。なぜなら、現在の添付ビューでは実際には存在しないビューを使用しようとすると、このエラー(ビューが見つかりません)が発生するからです。 – Rahul

答えて

1

logcatは、問題がactivity_start.xmlレイアウトのRegistrationFragmentにあることを明確に示しています。

No view found for id 0x7f0c006f (com.example.asus.carclubapps:id/activity_start) for fragment RegistrationFragment{85ef24b #0 id=0x7f0c006f} 

また、あなたが本当にあなたのactivity_start.xmlレイアウトに存在していない無効なビューを参照していると言います。

は、ここで私は1、あなたのRegisterFragmentから取得したくない場合がありますID flDetailContainerでのみFrameLayout見るあなたのactivity_start.xmlレイアウト

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/flDetailContainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

</FrameLayout> 

です。私はLayoutInflaterを使ってレイアウトからビューを取得しているあなたのRegisterFragmentの内部で間違ったビューを取得していると思います。

おそらく、fragment_register.xmlと呼ばれるレイアウトがあります。 RegisterFragmentのレイアウトからそのビューを取得する必要があります。

その場合RegisterFragmentのごonCreateView機能は、エラーが別の活動、主にRegisterfragmentから来ている

public class RegisterFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_register, parent, false); 
    } 
} 
+0

はい、私は登録断片と独自のレイアウトを持っています。しかし、私のStartActivityクラスでは、LoginFragmentを呼び出すだけです。 RegistrationFragmentではありません。私はここに何かを逃していますか –

+1

@Reaz良い説明、私の側からUpVote :) – Rahul

+1

ありがとう@rahulkapoor。あなたの答えが有益であり、受け入れられたことが分かりました。実際に問題を解決したように見えます。 –

0

ログからのあなたが実際にフラグメントのあなたの添付レイアウトファイルに存在しないいくつかのビューにアクセスしようとしているあなたのRegistrationFragmentでの明確な。

登録フレーズに正しい表示が添付されていることをご確認ください。実際に現在の添付ビューに存在しないビューを使用しようとすると、一般にエラー(ビューが見つかりません)が来るためです。

まだ動作しない場合は、キャッシュを無効にしてAndroid Studioを再起動してください。

+0

あなたは@ReazMurshedと同じことを指しているかもしれませんが、彼の答えは実際の答えです。あなたの答えはほんのちょうどコメントです。だからあなたは質問にコメントとして投稿するべきです。 –

+0

@XaverKapeller私の答えを更新しました。 – Rahul

0

のように見えることがあります。ビューが正しくありません。

Unable to start activity --> No view found for fragment RegistrationFragment 

ビューを修正しても問題が解決しない場合は、親切に私たちを更新してください。すぐに解決します。

+0

@IhsanRamliあなたのプロジェクトをきれいにして、キャッシュを無効にしてスタジオを再起動してください。 – Rahul

+0

@rahulkapoorそれは機能します!ありがとうございました。 –

関連する問題