2014-02-23 94 views
11

我已經閱讀過幾天的幾篇文章,我似乎無法弄清楚我的問題是什麼。我檢查了活動名稱,它們是相同的。我也檢查了我的清單,並在活動前面也有.活動不能分配給活動

這裏是我的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(); 
    } 

} 
+2

我們需要那個'PlanMeMainActivity'。 – chrylis

+0

添加了PlanMeMainActivity代碼。謝謝 – hozdaman

+1

你的「活動」實際上是一個「片段」(你擴展片段)。你需要延伸'活動' –

回答

20

改變這一行

public class PlanMeMainActivity extends Fragment { 

public class PlanMeMainActivity extends FragmentActivity { 

Here你可以找到所有你需要知道的有關活動,甚至更多。乾杯

+0

謝謝,我修好了。我會看看這個網站。謝謝你的幫助。 – hozdaman

+0

你救了我一天@Yakiv –

7

你在哪裏錯了?

<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> 

你爲什麼錯了?

錯誤在於您將清單中的片段添加爲 活動。然而片段不是活動

你應該做什麼?

您應該添加片段的活性,然後定義在 清單

+1

正確的排序,但他確實有單獨的「片段」和「活動」類;他不只是增加了「PlanMeMainFragment」作爲他的主要活動。 – chrylis

2

該活動你PlanMeMainActivity不是Activity;這是一個Fragment。你的活動需要是一個活動,然後你可以添加片段。

1

您的PlanMainActivity擴展了片段。片段不能被強制轉換爲活動

+0

謝謝,我看到我做錯了什麼。我需要更多地處理碎片。 – hozdaman

1

Clean Project解決了這個錯誤。在我的情況下錯誤的根本原因是不同的,但我得到了相同的「活動不能分配給活動」錯誤。

複製現有(完美工作)Android項目以創建新項目後,我遇到了此問題。 複製項目後,無法識別AppCompatActivity,導致Android清單文件中的所有活動顯示錯誤「活動不可分配到活動」。
這是通過清理項目解決的。

1

最後,我找出解決辦法就是添加下面一行在你的依賴:

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

1

只是刪除您的項目 的「.gradle」的文件夾,然後按同步按鈕。 其解決了我的問題