片段类在意图的 startactivity 方法中显示错误

Posted

技术标签:

【中文标题】片段类在意图的 startactivity 方法中显示错误【英文标题】:Fragment class showing error in intent's startactivity method 【发布时间】:2017-01-06 07:32:08 【问题描述】:

-30 12:14:06.020 24369-24369/com.sourcey.materialloginexample E/androidRuntime: FATAL EXCEPTION: main 进程:com.sourcey.materialloginexample,PID:24369 android.content.ActivityNotFoundException:找不到显式 活动课 com.sourcey.materialloginexample/com.surbhi.oopscouurier.activities.TwoFragment; 您是否在 AndroidManifest.xml 中声明了此活动? 在 android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1788) 在 android.app.Instrumentation.execStartActivity(Instrumentation.java:1512) 在 android.app.Activity.startActivityForResult(Activity.java:3810) 在 android.app.Activity.startActivityForResult(Activity.java:3761) 在 android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:813) 在 android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:871) 在 android.support.v4.app.Fragment.startActivity(Fragment.java:916) 在 com.surbhi.oopscourier.activities.OneFragment$1.onClick(OneFragment.java:26) 在 android.view.View.performClick(View.java:4848) 在 android.view.View$PerformClick.run(View.java:20262) 在 android.os.Handler.handleCallback(Handler.java:815) 在 android.os.Handler.dispatchMessage(Handler.java:104) 在 android.os.Looper.loop(Looper.java:194) 在 android.app.ActivityThread.main(ActivityThread.java:5637) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

public class OneFragment extends Fragment 

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
            View view = inflater.inflate(R.layout.fragment_one, container, false);
            Button next=(Button)view.findViewById(R.id.nextonefrag);
            next.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View view) 
                    Intent i=new Intent(getActivity(),TwoFragment.class);
                    startActivity(i);
                
            );
            return view;
        
    

xml:

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:background="#ffffff"
    android:layout_>

    <LinearLayout
        android:layout_
        android:layout_
        android:layout_marginRight="10dp"
        android:layout_marginLeft="10dp"
        android:background="@drawable/cell"
        android:layout_marginTop="150dp"
        android:orientation="vertical">


        <Spinner
            android:layout_
            android:layout_
            android:textColor="#000000"
            android:background="@color/colorPrimary"
            android:id="@+id/spinner" />

        <CheckBox
            android:layout_
            android:layout_
            android:text="Wait and Return"
            android:textColor="#000000"
            android:id="@+id/checkBox" />

        <CheckBox
            android:layout_
            android:layout_
            android:text="Express"
            android:textColor="#000000"
            android:id="@+id/checkBox2" />

        <Button
            android:layout_
            android:layout_
            android:text="Next"
            android:layout_marginBottom="10dp"
            android:background="@color/colorPrimary"
            android:id="@+id/nextonefrag"
            android:layout_marginRight="20dp"
            android:layout_gravity="right" />
    </LinearLayout>
</RelativeLayout>

当我单击片段内的按钮时,应用程序不幸停止了。并且在启动 Activity 方法中显示错误,指示在清单文件中声明片段活动。我试图在清单中声明片段活动,但它不能在那里声明。

【问题讨论】:

TwoFragment 是 Activity 类吗? 你忘了说它显示的是哪个错误 它没有显示任何错误。应用程序不幸停止并显示 Activity not found 异常。 不是片段类@Suhyeon Lee 如果 TwoFragment 是一个片段,那么不必像您调用的那样调用,试试这个***.com/questions/21028786/… 【参考方案1】:

如果您的 TwoFragment.java 扩展了 Fragment 并且您已经动态添加了片段,您可以使用 Fragment TwoFragment 替换之前的片段,如下所示:

Fragment fragment = new TwoFragment();
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.frame, fragment);
        fragmentTransaction.commit();

Activity 和 Fragment 是两个不同的东西:

Activity 是一个提供屏幕的应用程序组件,用户可以通过该屏幕进行交互以执行某些操作。更多详情:http://developer.android.com/guide/components/activities.html

而 Fragment 表示 Activity 中的行为或用户界面的一部分。您可以在单个活动中组合多个片段以构建多窗格 UI 并在多个活动中重用一个片段。您可以将片段视为活动的模块化部分,它有自己的生命周期,接收自己的输入事件,并且可以在活动运行时添加或删除(有点像“子活动”,您可以在不同的活动中重复使用)。片段必须始终嵌入到活动中,并且片段的生命周期直接受到宿主活动生命周期的影响。 http://developer.android.com/guide/components/fragments.html

【讨论】:

【参考方案2】:

如果您需要在单击按钮时将第一个片段替换为第二个片段,请使用片段事务。您的程序发生的错误是因为您试图加载一个像活动一样的片段。所以将代码替换为 Fragment Transaction。

【讨论】:

【参考方案3】:

两个片段是活动还是片段?

1.Manifest 中只能声明Activity。 2.如果 TwoFragment 是一个 Fragment 你需要一个不同的方法来在 Fragment 之间切换..

【讨论】:

以上是关于片段类在意图的 startactivity 方法中显示错误的主要内容,如果未能解决你的问题,请参考以下文章

Android - ActivityUnitTestCase 测试类中 startActivity 方法上的 AssertionFailedError

Android在 普通类(非Activity,多数为Adapter) 中 传输数据为空值 解决方法 :在startActivity 用 intent传输数据

如何保存底部导航片段的状态 - 具有单个导航图的 Android 导航组件

关于安卓intent启动activity的几种情况

从片段中捕获图像

am start 启动activity 命令