代码如下:
java代码:
package com.dev;import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.View;public class CviewActivity extends ListActivity {
    /** Called when the activity is first created. */
private MyView myView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myView=(MyView)findViewById(R.id.myView);
    }
    
    class MyView extends View { public MyView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}     public MyView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}          public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
} @Override  
        protected void onDraw(Canvas canvas) {
         Paint mPaint=new Paint();
            canvas.drawLine(10,10,500,500, mPaint); 
            
            super.onDraw(canvas);  
        }  
 }  
}main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
<view  
    class="com.dev.CviewActivity$MyView"  
    android:id="@+id/myView"
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"  
    android:layout_weight="10"          
    />
</LinearLayout>
一行一行代码查找,没有错,查了好多资料,也都是这样写的,不知错在那里?

解决方案 »

  1.   

    public class CviewActivity extends ListActivity 继承自ListActivity的类,xml中需添加默认的ListView控件,且id指定为系统默认"@id/android:list"解决:
    把ListActivity 改为Activity或者在main.xml中添加<ListView></ListView>节点都可以
      

  2.   

    不好意思,
    public class CviewActivity extends ListActivity
    继承ListActivity是出错之后,我试了下ListActivity看能不能用而没改过来的,
    你说的两种方法我都试了,最后都报错……
      

  3.   

    他们也是继承的listActivity类吗 ,建议先改成Activity类,从新试一下。
      

  4.   

    MyView 单独写在一个.java文件中<view   
      class="com.dev.MyView"   
      android:id="@+id/myView"
      android:layout_width="fill_parent"   
      android:layout_height="wrap_content"   
      android:layout_weight="10"   
      />
    </LinearLayout>
    这样试试吧
      

  5.   

    我可能知道原因.
    在MyView前面加个static试试.
    楼主提问题也太吝啬了.错误信息也不贴出来.我只能猜了.
      

  6.   

    把ListActivity改成了Activity试了,不行
      

  7.   

    呵呵,不好意思
    在MyView前面加static,不报错,但什么也画不出来了……
      

  8.   

    运行是出了三个异常,在网上查了相关资料,但却没有找到答案,异常如下:
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dev/com.dev.CviewActivity}:……Caused by:android.view.InflateException:Binary XML file line #13:Error inflating class com.dev.CviewActivity……Caused by:java.lang.NoSuchMethodException:MyView(Context,AttributeSet)
      

  9.   

    把你的自定义 view 单独放到一个 java 文件中,变成 public 的,在 xml 中使用 
    <com.dev.myView .../>
    这样用试一试;没用过 ListActivity,不清楚是否与此有关
      

  10.   

    今天早上起来,我又试了一下,发现在MyView前面加个static可以了,但这是为什么呢,不加Static为什么行不通呢?
      

  11.   

    内部类前加static,表明该内部类不依赖于外部类的创建而创建
      

  12.   

    为什么不加Static就报错了呢,我在网上看别人内部类都是这样写的
      

  13.   

    生存周期的问题吧。由于不是static,直接被释放了。由于在运行的一短时间内没有发现MyView有动作。
      

  14.   

    如果你不理解static是什么意思,请原谅我很不客气的说一句,你的java知识还没毕业. 回复中有一些回答很简短.楼主未必能够了解.必须做实验去验证自己对这个modifier的理解.否则你以后开发碰到的钉子绝对不少.特别是安卓开发.