片段类在意图的 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传输数据