Android.content.ActivityNotFoundException:无法找到显式活动类 - 片段中的Intent

时间:2016-02-10 21:02:51

标签: android android-fragments android-intent

当我使用应用程序时,应用程序在运行时导致错误,这是意图中的错误,但代码中没有错误,我所看到的,它说:

    android.content.ActivityNotFoundException: Unable to find explicit activity class .... have you declared this activity in your AndroidManifest.xml?

然而,它不需要在清单中说明,因为它是一个片段,我已经在清单中说明了它膨胀的活动。

        @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {   //I
    Intent i = new Intent(ViewAllRecipe.this.getActivity(), EditRecipesFragment.class);
    HashMap<String, String> map = (HashMap) parent.getItemAtPosition(position);
    String RecId = map.get(Config.TAG_ID).toString();
    i.putExtra(Config.REC_ID, RecId);
    getActivity().startActivity(i);
}

错误来自:

    getActivity().startActivity(i);

它正在膨胀的活动是,其他片段只能正常工作;

       <activity
        android:name=".NavigationActivity"
        android:label="@string/app_name" >
    </activity>

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用此

从不同的活动/片段中调用一个活动
Intent intent = new Intent(context, YourNewActivity.class);

上面的构造函数将采用下面解释的两个参数。

1)。 Context作为其第一个参数(使用此参数是因为Activity类是Context的子类)

2)。系统应提供Class的应用程序组件的Intent(在这种情况下,应该启动的活动)

但是在你的情况下,第二个参数是Fragment,它不依赖于上面的语法,你得到ActivityNotFoundException的原因是因为在这一行中

Intent i = new Intent(ViewAllRecipe.this.getActivity(), EditRecipesFragment.class);

JVM期望第二个参数为Activity类,当它在manifest中找不到任何此类时,它会抛出ActivityNotFoundException

要从Fragment拨打Activity,您必须使用FragmentTransactions

答案 1 :(得分:0)

这条线对我来说是个错误:

Intent i = new Intent(ViewAllRecipe.this.getActivity(), EditRecipesFragment.class);

您不能对Fragment类使用startActivity。 startActivity仅适用于清单中注册的Activity子类。

如果您有一个要在活动中显示的片段,则需要找到该活动的容器视图,并通过FragmentManager使用FragmentTransaction为该活动安排片段到变得可见。