2016-11-27 160 views
0

我试图让我的StartActivity课程可以从一个Fragment动态更改为另一个,比如首先会打开LoginFragment。如果用户没有任何账户,他们可以注册新账户。在单个活动中登录和注册将是两个不同的片段。开始新片段后活动崩溃

这里是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,但事情是在我的StartActivity我只要求LoginFragment尚未RegistrationFragment。我在这里错过了什么吗?


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清楚地表明问题出现在您的RegistrationFragmentactivity_start.xml布局中。

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

它还说,你指的是哪个并没有真正存在于你的activity_start.xml布局无效视图。

这是你的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> 

我看到的唯一ID为flDetailContainer,你可能不希望从你的RegisterFragment得到FrameLayout。我认为你在RegisterFragment内部看到错误的视图,你可以从LayoutInflater获得布局视图。

我想,这里有一个名为fragment_register.xml的布局。您需要从RegisterFragment的布局中获取视图。

在这种情况下,你的RegisterFragmentonCreateView功能可能看起来像

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

错误是来自另一个活动,主要是Registerfragment到来。该视图不正确。

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

如果修复视图和问题是持续性,请更新我们,我们会解决它尽快。

+0

@IhsanRamli尝试清理您的项目,使缓存无效并重新启动您的工作室 – Rahul

+0

@rahulkapoor它的工作原理!谢谢。 –