活动不能分配给活动

时间:2014-02-23 22:07:58

标签: java android

我在过去几天看过几篇帖子,我似乎无法弄清楚我的问题是什么。我检查了活动名称,它们是相同的。我也检查了我的清单,我也在活动前面有.

这是我的logcat文件:

02-23 16:48:22.438    1508-1508/com.pctoolman.planme.app E/AndroidRuntime﹕ FATAL   
         EXCEPTION: main
         java.lang.RuntimeException: Unable to instantiate activity     
         ComponentInfo{com.pctoolman.planme.app/com.pctoolman.planme.app.PlanMeMainActivity}:
         java.lang.ClassCastException: com.pctoolman.planme.app.PlanMeMainActivity cannot be 
         cast 
         to android.app.Activity
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
         at android.app.ActivityThread.access$600(ActivityThread.java:141)
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
         at android.os.Handler.dispatchMessage(Handler.java:99)
         at android.os.Looper.loop(Looper.java:137)
         at android.app.ActivityThread.main(ActivityThread.java:5103)
         at java.lang.reflect.Method.invokeNative(Native Method)
         at java.lang.reflect.Method.invoke(Method.java:525)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
         at dalvik.system.NativeStart.main(Native Method)
         Caused by: java.lang.ClassCastException: com.pctoolman.planme.app.PlanMeMainActivity 
         cannot
         be cast to android.app.Activity
         at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
         at android.app.ActivityThread.access$600(ActivityThread.java:141)
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
         at android.os.Handler.dispatchMessage(Handler.java:99)
         at android.os.Looper.loop(Looper.java:137)
         at android.app.ActivityThread.main(ActivityThread.java:5103)
         at java.lang.reflect.Method.invokeNative(Native Method)
         at java.lang.reflect.Method.invoke(Method.java:525)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
         at dalvik.system.NativeStart.main(Native Method)

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.pctoolman.planme.app" >
        <application
                android:allowBackup="true"
                android:icon="@drawable/ic_launcher"
                android:label="@string/app_name"
                android:theme="@style/AppTheme" >
        <activity
                android:name="com.pctoolman.planme.app.PlanMeMainActivity"
                android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
            android:name="com.pctoolman.planme.app.NewEventSetupActivity"
            android:label="@string/setup">
    </activity>
</application> 

PlanMeMainFragment.java

package com.pctoolman.planme.app;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class PlanMeMainFragment extends Fragment {

private Button mNewButton, mExistingButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.planme_main_fragment, parent, false);

        mNewButton = (Button)v.findViewById(R.id.new_event_button);
        mNewButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myIntent = new Intent(getActivity(), NewEventSetupActivity.class);
                getActivity().startActivity(myIntent);
            }
        });
        return  v;
    }
}

PlanMeMainActivity.java

package com.pctoolman.planme.app;

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

public class PlanMeMainActivity extends Fragment {

    public Fragment createFragment() {
        return new PlanMeMainFragment();
    }

}

9 个答案:

答案 0 :(得分:26)

更改此行

public class PlanMeMainActivity extends Fragment {

public class PlanMeMainActivity extends FragmentActivity {

Here您可以找到有关活动的所有信息,甚至更多。干杯

答案 1 :(得分:8)

你哪里错了?

  <activity
          android:name="com.pctoolman.planme.app.PlanMeMainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

你为什么错了?

  

错误在于你在Manifest中添加了Fragment as   活动。但是片段不是活动

你应该做什么?

  

您应该在活动中添加片段,然后在中定义该活动   清单

答案 2 :(得分:2)

您的PlanMeMainActivity 不是Activity ;这是一个Fragment。您的活动需要是一项活动,然后您可以向其中添加片段。

答案 3 :(得分:2)

Clean Project解决了这个错误。在我的情况下错误的根本原因是不同的,但我得到相同的“活动不能分配给活动”错误。

在复制现有(完美工作)的Android项目以创建新项目后,我遇到了这个问题。 复制项目后,无法识别AppCompatActivity,导致Android Manifest文件中的所有活动显示错误“activity-is-not-assignable-to-activity”。
通过清理项目解决了这个问题。

答案 4 :(得分:1)

您的PlanMainActivity扩展了片段。片段无法转换为活动

答案 5 :(得分:1)

最后,我发现解决方案是在依赖项中添加以下行:

compile 'com.android.support:support-v4:23.2.0'

答案 6 :(得分:1)

只需删除项目的“.gradle”文件夹即可 然后按同步按钮。 它解决了我的问题

答案 7 :(得分:0)

在我的情况下,错误是在Android Studio中安装的插件发生的。所以检查你的插件并卸载奇怪的插件。

答案 8 :(得分:0)

在清理项目后,通过使缓存无效并重新启动解决了我的问题。