2015-04-04 233 views
1

我在我的應用程序中有一個自定義View類。我想擴展它,並把它添加到我的XML文件,但是當我這樣做,我得到的類未發現異常..類未找到Android

下面是XML文件:

floorplan.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/floorplannextbutton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginRight="47dp" 
     android:layout_marginTop="22dp" 
     android:text="Next" /> 

    <com.example.helloworld3.FloorPlan.DrawView2 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 


</RelativeLayout> 

而且這是我的DrawView2類。這是另一個類稱爲平面圖內,但整個代碼會太長張貼

DrawView2.java

public class DrawView2 extends RelativeLayout { 
     Paint paint = new Paint(); 

public DrawView2(Context context) { 
      super(context); 
      paint.setColor(Color.RED); 
} 
public void dispatchDraw(Canvas canvas) { 
      super.dispatchDraw(canvas); 
for(int i =0,j=i+1 ; i<subpath.size()&& j<subpath.size(); i++, j++){ 


        ux = subpath.get(i).v.x; 
        dx =subpath.get(i).v.y; 
        rx= subpath.get(j).v.x; 
        lx = subpath.get(j).v.y; 




       canvas.drawLine(ux, dx , rx, lx, paint); 


     } 
} 

這是我得到的logcat的:

04-04 20:37:59.959: D/(884): HostConnection::get() New Host Connection established 0x8b92258, tid 884 
04-04 20:38:07.047: W/KeyCharacterMap(884): No keyboard for id 0 
04-04 20:38:07.047: W/KeyCharacterMap(884): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
04-04 20:38:16.599: D/AndroidRuntime(884): Shutting down VM 
04-04 20:38:16.599: W/dalvikvm(884): threadid=1: thread exiting with uncaught exception (group=0xb5ff94f0) 
04-04 20:38:16.607: E/AndroidRuntime(884): FATAL EXCEPTION: main 
04-04 20:38:16.607: E/AndroidRuntime(884): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.helloworld3/com.example.helloworld3.FloorPlan}: android.view.InflateException: Binary XML file line #18: Error inflating class com.example.helloworld3.FloorPlan.DrawView2 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.os.Looper.loop(Looper.java:130) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-04 20:38:16.607: E/AndroidRuntime(884): at java.lang.reflect.Method.invokeNative(Native Method) 
04-04 20:38:16.607: E/AndroidRuntime(884): at java.lang.reflect.Method.invoke(Method.java:507) 
04-04 20:38:16.607: E/AndroidRuntime(884): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-04 20:38:16.607: E/AndroidRuntime(884): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-04 20:38:16.607: E/AndroidRuntime(884): at dalvik.system.NativeStart.main(Native Method) 
04-04 20:38:16.607: E/AndroidRuntime(884): Caused by: android.view.InflateException: Binary XML file line #18: Error inflating class com.example.helloworld3.FloorPlan.DrawView2 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
04-04 20:38:16.607: E/AndroidRuntime(884): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.Activity.setContentView(Activity.java:1657) 
04-04 20:38:16.607: E/AndroidRuntime(884): at com.example.helloworld3.FloorPlan.onCreate(FloorPlan.java:164) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
04-04 20:38:16.607: E/AndroidRuntime(884): ... 11 more 
04-04 20:38:16.607: E/AndroidRuntime(884): Caused by: java.lang.ClassNotFoundException: com.example.helloworld3.FloorPlan.DrawView2 in loader dalvik.system.PathClassLoader[/data/app/com.example.helloworld3-1.apk] 
04-04 20:38:16.607: E/AndroidRuntime(884): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) 
04-04 20:38:16.607: E/AndroidRuntime(884): at java.lang.ClassLoader.loadClass(ClassLoader.java:551) 
04-04 20:38:16.607: E/AndroidRuntime(884): at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.createView(LayoutInflater.java:471) 
04-04 20:38:16.607: E/AndroidRuntime(884): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570) 
04-04 20:38:16.607: E/AndroidRuntime(884): ... 20 more 

而且是我的清單文件:

AndroidManifes。 xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.helloworld3" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="21" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      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=".FloorPlan" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="com.example.helloworld3.FLOORPLAN" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".FloorPlanTwo" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="com.example.helloworld3.FLOORPLANTWO" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".FloorPlanThree" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="com.example.helloworld3.FLOORPLANTHREE" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 

    </application> 

</manifest> 

謝謝大家的幫助!

+0

如果您註釋掉'這是否工作paint.setColor()'? – natario 2015-04-04 20:51:21

回答

2

如果DrawView2是一個內部類,應該在XML被稱爲:我有類似你這樣的問題

... 
<com.example.helloworld3.FloorPlan$DrawView2 
android:layout_width="match_parent" 
android:layout_height="match_parent"/> 
... 
+0

謝謝你的回答。當我將 出現錯誤時,需要按屬性進行操作,>或/> – 2015-04-04 21:00:42

+0

抱歉,我誤導了您。當然,我只提到了開始。整個標籤與您的代碼相同,您只需更改「。」。 (點)到「$」。 – AndroidEx 2015-04-04 21:03:40

+0

謝謝,但我仍然得到相同的錯誤 – 2015-04-04 21:11:32

0

。請嘗試以下兩件事情:

  1. 擴展的查看,而不是從RelativeLayout的

  2. 這些構造函數添加到您的DrawView2類

    public DrawView2(Context context) 
    { 
        super(context); 
    } 
    
    public DrawView2(Context context, AttributeSet attrs) 
    { 
        super(context, attrs); 
    
    } 
    
    public DrawView2(Context context, AttributeSet attrs, int defStyleAttr) 
    { 
        super(context, attrs, defStyleAttr); 
    }